по умолчанию, будет ли plinq использовать разделение по диапазону или разделение на куски для словаря <string, string>? а как заставить другого? - PullRequest
2 голосов
/ 17 января 2012

По умолчанию, plinq будет использовать разделение на диапазоны или разделение на куски для Dictionary<string, string>?

Это мой вариант использования:

    Dictionary<string,string> asmachtas = new Dictionary<string,string>();
    ...
    int sum = asmachtas.AsParallel().Sum(arg => myFunction(arg));

Как я могу проверить это сам?Как я могу форсировать другой тип разбиения?

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Секционирование диапазона применяется только к коллекциям, которые реализуют IList <>.Dictionary <,> реализует только IEnumerable <>, а не IList <>, поэтому будет использоваться разбиение на фрагменты.

Алгоритм разделения, используемый PLINQ, - это деталь реализации, поэтому у вас нет способа посмотретьэто до.Вы можете поместить точку останова в делегат, переданный в Sum (), и вывести схему разделения из стеков вызовов, но стеки довольно грязные.

1 голос
/ 17 января 2012

Как сказал Игорь, в запросе будет использоваться разбиение на куски.

Я хотел бы добавить, что при преобразовании этого asmachtas.ToList().AsParallel() будет использоваться разделение по диапазонам.Или, если вы работали со списком, вы можете создать разделитель чанков с помощью Partitioner.Create(asmachtas, true).

...