2014-01-30 3 views
0

Я изучаю PLINQ. Я попробовал на примере, приведенном на сайте. Однако я вижу, что результат неверен и также меняется, когда я повторно запускаю программу много раз. Сначала он не дает всех простых чисел, а во-вторых, он дает только 9591 случайных простых чисел.Результат PLINQ неверен и варьируется в зависимости от пробега

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3); 

var parallelQuery = 
    from n in numbers.AsParallel() 
    where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0) 
    select n; 

int[] primes = parallelQuery.ToArray(); 

Цените любую помощь!

+1

В каком он варьируется? Порядок чисел может отличаться, потому что вы не сортируете их. – Kaerber

+0

От 3 до (100000-3) есть простые числа более 9591, но это показывает только 9591 простых чисел, а не отдых. –

+0

Вы не включаете 2, посмотрите мой ответ. – Kaerber

ответ

7

Имеет 9592 простых чисел ниже 100 000, а ваш диапазон не включает 2, что является простым числом.

Порядок простых чисел будет отличаться, потому что вы не сортируете их и не можете контролировать, как PLINQ разбивает работу на параллельные куски.

+0

Спасибо Kaerber. Я сравнивал PLINQ и традиционную нить. В моей традиционной логике потоков возникла некоторая проблема, поэтому я стал ошибаться (более простые числа, т. Е. Избыточные). –

 Смежные вопросы

  • Нет связанных вопросов^_^