次のコードを新しいメソッドに抽出したいと思います。
...
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(); });
}
インスタンスの数が必要なため、コンパイルされません。
私のアプローチは最善ではないと確信していますが、今のところこれ以上のことはわからないので、ここでこの質問をする必要があります。