C# 异步和Parallel.ForEach对IO操作的潜在好处
我正在开发和维护一个.NET3.5工具,我想知道使用.NET4新的TPL,甚至是仍在CTP中的新的异步功能,是否可以获得性能上的潜在提高 该工具的工作大致可以描述为:C# 异步和Parallel.ForEach对IO操作的潜在好处,c#,multithreading,asynchronous,task-parallel-library,C#,Multithreading,Asynchronous,Task Parallel Library,我正在开发和维护一个.NET3.5工具,我想知道使用.NET4新的TPL,甚至是仍在CTP中的新的异步功能,是否可以获得性能上的潜在提高 该工具的工作大致可以描述为: 检索容器文件列表(当前为.MSI文件)——几十个,大约50-70个 迭代每个文件,并构造一个表示它的运行时对象 对于创建的每个运行时对象,对其内容执行一些查询(将其内容与系统上的一些文件进行比较) 第#2项和第#3项是冗长的,我想通过使用Parallel.ForEach或其他并行执行此工作的方法来获得一些关于改进执行时间(目前只有
在开始开发之前,您认为这种应用程序可以从中受益吗?这肯定会通过使用TPL得到一些改进,TPL现在在.NET 4中提供 这三个步骤都可以设计为并行运行 尽管如此,鉴于上述情况,很难知道您会看到多大的改进。主要问题是繁重的文件I/O。即使您利用了多个内核,磁盘I/O也可能成为瓶颈,而尝试并行运行这一过程实际上可能会降低代码的这些部分
如果您正在执行大量与查询/计算相关的IO,那么仅通过并行运行例程可能不会获得很大的性能优势。我会运行一个探查器,查看您的应用程序在哪里花费时间,然后再决定。如果您发现它正在等待I/O完成,那么您可能会从使用中受益。如果您发现自己受计算限制,那么,根据您预期的运行时环境(多核/单核),您可能会发现多线程计算会带来好处。当然,您可能会发现这两种情况都适用 顺便说一句,您还可以使用.NET3.5中的许多.NET4线程功能。我目前正在一个高效的.NET3.5应用程序中使用它 在开始开发之前,您认为这种应用程序可以从中受益吗 不多。您描述了一个三阶段系统,其中每个阶段都受到严重的I/O限制 我假设您只有一个磁盘,这意味着并行运行甚至可能会降低速度(更多的寻道操作) 另一方面,第2)阶段和第3)阶段的CPU密集程度可能会有所提高
你必须像往常一样测量 这就是我害怕的。我将试着分析它以获得更多的数据。回答得好,看到你当时是29999K并且投票给了你+1 :-)