我正在开发和维护.NET 3.5工具,并且想知道使用.NET 4的新TPL甚至是仍在CTP中的新异步功能是否可以获得性能的潜在提升。
该工具的工作大致可以描述为:
项目#2和#3是冗长的,我想通过使用Parallel.ForEach或其他方法执行此操作来获得关于改善执行时间(现在是几分钟)的潜力的一些意见并行工作。
我预见到的潜在改进是:
使用多个CPU /核心 正在进行IO操作(如读取文件)以保持应用程序正常运行。
在开始开发之前,您是否认为此类应用程序可以从中受益?
答案 0 :(得分:3)
使用TPL可以获得一些改进,现在可以在.NET 4中使用。
所有这三个步骤都可能设计为并行运行。
话虽如此,鉴于上述情况,很难知道你会看到多少改进。主要问题是繁重的文件I / O.即使您利用多个内核,磁盘I / O也可能成为瓶颈,并且尝试并行运行可能会减慢代码的这些部分。
如果你在查询/计算方面做了大量的IO,那么仅仅通过并行运行例程就不会获得非常大的性能优势。
答案 1 :(得分:3)
我会运行一个分析器来查看您的应用程序花费时间然后再决定。如果您发现它正在等待I / O完成,那么您可能会从使用Asynchronous Programming Model中受益。如果您发现自己是计算绑定的,那么,根据您预期的运行时环境(多核/单核),您可能会发现多线程计算是有益的。当然,您可能会发现两种情况都适用。
顺便说一句,您还可以使用Reactive Extensions在.NET 3.5中使用许多.NET 4线程功能。我目前正在一个高效的.NET 3.5应用程序中使用它。
答案 2 :(得分:1)
在开始开发之前,您是否认为此类应用程序可以从中受益?
不是很多。您描述了一个3阶段系统,其中每个阶段都受到严格的I / O限制。
我假设你只有1个磁盘,这意味着并行运行甚至可以减慢速度(更多Seek操作)。
另一方面,阶段2)和3)可能是CPU密集型,足以看到一些改进。
你必须像往常一样进行衡量。