Интересно, можно ли оптимизировать следующий код для выполнения быстрее. В настоящее время я представляю максимум около 1,4 миллиона простых сообщений в секунду на довольно простой структуре потока данных. Я знаю, что этот примерный процесс передает/трансформирует сообщения синхронно, однако в настоящее время я тестирую поток данных TPL как возможную замену для своего собственного решения на основе задач и параллельных коллекций. Я знаю, что термины «параллельные» уже предлагают мне работать параллельно, но для текущих целей тестирования я толкал сообщения на своем собственном решении синхронно, и я получаю около 5,1 млн сообщений в секунду. Что мне здесь не хватает, я прочитал 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