Проблемы с извлечением метода из-за параллелизма - PullRequest
0 голосов
/ 15 сентября 2011

Я хотел бы извлечь следующий код в новый метод:

...
Parallel.For(0, Environment.ProcessorCount, i => 
       { handTypeSum[i] = new PSTLooper(intHands).EvalEnumeration(i); });
...

PSTLooper имеет тип IEvaluator, и у меня есть несколько других IEvaluator с, которые я хотел бы проверить с этим методом,Метод должен быть выполнен как можно быстрее, а пока я вполне доволен производительностью Parallel.For (я хотел бы узнать о более быстрых / лучших методах).

Мне нужно сгенерировать новый объектдля каждого потока и текущий номер потока для моего EvalEnumeration(int instance) метода.Несколько попыток провалились из-за этих ограничений.

Некоторые из моих попыток:


StartNewTest(new PSTLooper(intHands));

public void StartNewTest(IEvaluator)
{
     Parallel.For(0, Environment.ProcessorCount, i => 
          { handTypeSum[i] = e.EvalEnumeration(i); });
}

, который компилируется, но использует только IEvaluator и не создает новый.


StartNewTest(new PSTLooper(intHands).EvalEnumeration());

public void StartNewTest(Func<long[]> func)
{
     Parallel.For(0, Environment.ProcessorCount, i => 
          { handTypeSum[i] = func.Invoke(); });
}

, который не компилируется, так как мне нужно # экземпляра.


Я совершенно уверен, что мой подход не самый лучший, но длясейчас я не знаю ничего лучше и поэтому должен задать этот вопрос здесь.

1 Ответ

1 голос
/ 15 сентября 2011

Это у вас работает?

StartNewTest(i => new PSTLooper(intHands).EvalEnumeration(i));

public void StartNewTest(Func<int, long[]> func)
{
     Parallel.For(0, Environment.ProcessorCount, i => 
          { handTypeSum[i] = func(i); });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...