2016-01-22 60 views
0

我從一些文件中解析了很多單詞(百萬),並通過語言對它們進行了計數。我使用PLINQ是因爲性能,但我認爲(通過觀察任務管理器),整個過程將順序進行。可能被我的聚合函數阻塞。從ParallelQuery彙總自定義數據

這可能嗎?

這裏被牽連PLINQ

ParallelQuery<string> query = Directory.EnumerateFiles(test, "*.d", SearchOption.AllDirectories).AsParallel(); 
query = query.SelectMany(parseStrings).Where(isValidPhrase); 
query = query.SelectMany(s => Regex.Matches(s, @"\w+").Cast<Match>().Select(match => match.Value)); 

Result output = query.Aggregate(new Result(), (result, word) => 
{ 
    if (word.All(russianAlfabet.Contains)) 
     result.Ru++; 
    else if (czechWords.Contains(word)) 
     result.Cs++; 
    else 
     result.Other++; 

    return result; 
}); 

...這是一類聚合結果

class Result { 
    public int Ru { get; set; } 
    public int Cs { get; set; } 
    public int Other { get; set; } 
} 

回答

1

試試這個過載ParallelEnumerable.Aggregate

public static TResult Aggregate<TSource, TAccumulate, TResult>(
    this ParallelQuery<TSource> source, 
    TAccumulate seed, 
    Func<TAccumulate, TSource, TAccumulate> updateAccumulatorFunc, 
    Func<TAccumulate, TAccumulate, TAccumulate> combineAccumulatorsFunc, 
    Func<TAccumulate, TResult> resultSelector 
) 
+0

謝謝,幫助! :-) –