Ускорение потока данных TPL?

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

Ответы на вопрос(3)

Ваш ответ на вопрос