Я хотел бы извлечь следующий код в новый метод:
...
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(); });
}
, который не компилируется, так как мне нужно # экземпляра.
Я совершенно уверен, что мой подход не самый лучший, но длясейчас я не знаю ничего лучше и поэтому должен задать этот вопрос здесь.