我想知道下面的代碼是否可以優化執行得更快。我目前似乎最大限度地利用一個非常簡單的數據流結構,每秒發送大約140萬條簡單消息。我知道這個示例過程同步傳遞/轉換消息,但是,我目前正在測試TPL Dataflow作爲基於任務和併發集合的自定義解決方案的可能替代品。我知道術語「併發」已經暗示我並行運行事務,但爲了當前的測試目的,我通過同步將消息推送到自己的解決方案中,並且每秒獲得大約510萬條消息。我在這裏錯過了什麼,我讀了TPL Dataflow被推爲高吞吐量,低延遲解決方案,但到目前爲止,我必須忽略性能調整。任何人都可以指出我正確的方向嗎?TPL數據流加速?
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();
}
}
這就是我在運行代碼時在計算機上得到的數字。我想說的是,你不能比較這樣的表現,這不是一個很好的表現真實的表現。 – svick
我非常感謝你的批評,我可以修改一些代碼,運行更多的測試併發布更新。你介意以後再看一次嗎?非常感謝。 –
好的,當你發佈它時,我會看一看。 – svick