TPL Dataflow Speedup?
Gostaria de saber se o código a seguir pode ser otimizado para executar mais rapidamente. Eu atualmente pareço maximizar cerca de 1,4 milhão de mensagens simples por segundo em uma estrutura de fluxo de dados bastante simples. Estou ciente de que esse processo de amostra transmite mensagens de maneira síncrona, mas atualmente testei o TPL Dataflow como uma possível substituição para minha própria solução personalizada com base em tarefas e coleções simultâneas. Eu sei que os termos "concorrente" já sugerem que eu executo as coisas em paralelo, mas para os testes atuais, eu empurrei mensagens em minha própria solução através de sincronia e chego a cerca de 5,1 milhões de mensagens por segundo. O que estou perdendo aqui, eu li TPL Dataflow foi empurrado como uma solução de alta latência de alta taxa de transferência, mas até agora eu devo estar negligenciando ajustes de desempenho. Alguém que poderia me apontar na direção certa, por favor?
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();
}
}