次のコードを最適化して実行速度を上げることができるかどうか疑問に思います。私は現在、非常に単純なデータフロー構造で1秒あたり約140万の単純なメッセージで最大になっているようです。このサンプルプロセスはメッセージを同期的に渡す/変換することを認識していますが、現在、タスクと同時収集に基づく独自のカスタムソリューションの可能な代替として、TPLデータフローをテストしています。「同時」という用語は、物事を並行して実行することをすでに示唆していますが、現在のテスト目的では、同期を介して独自のソリューションにメッセージをプッシュし、1秒あたり約510万のメッセージに到達します。ここで欠けているのは、TPL Dataflowが高スループット、低遅延のソリューションとしてプッシュされたことを読みましたが、これまでのところ、パフォーマンスの微調整を見落としているに違いありません。私を正しい方向に向けることができる人はいますか?
class TPLDataFlowExperiments
{
public TPLDataFlowExperiments()
{
var buf1 = new BufferBlock<int>();
var transform = new TransformBlock<int, string>(t =>
{
return "";
});
var action = new ActionBlock<string>(s =>
{
//Thread.Sleep(100);
//Console.WriteLine(s);
});
buf1.LinkTo(transform);
transform.LinkTo(action);
//Propagate all Completions down the flow
buf1.Completion.ContinueWith(t =>
{
transform.Complete();
transform.Completion.ContinueWith(u =>
{
action.Complete();
});
});
Stopwatch watch = new Stopwatch();
watch.Start();
int cap = 10000000;
for (int i = 0; i < cap; i++)
{
buf1.Post(i);
}
//Mark Buffer as Complete
buf1.Complete();
action.Completion.ContinueWith(t =>
{
watch.Stop();
Console.WriteLine("All Blocks finished processing");
Console.WriteLine("Units processed per second: " + cap / watch.ElapsedMilliseconds * 1000);
});
Console.ReadLine();
}
}