0

次のコードを新しいメソッドに抽出したいと思います。

...
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(); });
}

インスタンスの数が必要なため、コンパイルされません。


私のアプローチは最善ではないと確信していますが、今のところこれ以上のことはわからないので、ここでこの質問をする必要があります。

4

1 に答える 1

1

これはあなたのために働きますか?

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

public void StartNewTest(Func<int, long[]> func)
{
     Parallel.For(0, Environment.ProcessorCount, i => 
          { handTypeSum[i] = func(i); });
}
于 2011-09-15T11:21:43.663 に答える