使用transformblocks的糟糕表现

时间:2014-04-03 13:39:36

标签: performance concurrency task-parallel-library c#-5.0 tpl-dataflow

我目前正在尝试使用TransformBlocks来让我的代码运行得更快。相反,我发现我基本上没有实现并行化:

正如您所看到的,存在相当多的死空间,I / O很少或其他问题阻止事物并行运行(注意:所有绿色块都是主线程)。

调用代码的基本结构如下:

var options = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 8 };
var download = new TransformBlock<string, Tuple<string, string>>(s => sendAndReciveRequest(s), options);
var process = new TransformBlock<Tuple<string, string, TransformBlock<string, Tuple<string, string>>>, List<string>>(s => Helpers.ParseKBDL(s), options);
var toObjects = new TransformBlock<List<string>, List<Food>>(list => toFood(list), options);

for (char char1 = 'a'; char1 < 'z' + 1; char1++)
    download.Post(char1.ToString());

while ((download.InputCount != 0 || download.OutputCount != 0 || process.InputCount != 0) || (Form1.downloadCount != Form1.processCount))
{
    if (download.OutputCount == 0 && download.InputCount == 0)
    {
        continue;
    }
    var res = download.Receive();
    process.Post(new Tuple<string, string, TransformBlock<string, Tuple<string, string>>>(res.Item1, res.Item2, download));
}

注意:检查和元组混乱的原因是偶尔进程需要向下载块添加更多内容。我非常愿意改变这种组织方式。

所以我的问题:为什么这段代码没有达到加速?我怎样才能重组它以便我获得加速?

0 个答案:

没有答案