我目前正在尝试使用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));
}
注意:检查和元组混乱的原因是偶尔进程需要向下载块添加更多内容。我非常愿意改变这种组织方式。
所以我的问题:为什么这段代码没有达到加速?我怎样才能重组它以便我获得加速?