Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步和Parallel.ForEach对IO操作的潜在好处_C#_Multithreading_Asynchronous_Task Parallel Library - Fatal编程技术网

C# 异步和Parallel.ForEach对IO操作的潜在好处

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或其他并行执行此工作的方法来获得一些关于改进执行时间(目前只有

我正在开发和维护一个.NET3.5工具,我想知道使用.NET4新的TPL,甚至是仍在CTP中的新的异步功能,是否可以获得性能上的潜在提高

该工具的工作大致可以描述为:

  • 检索容器文件列表(当前为.MSI文件)——几十个,大约50-70个
  • 迭代每个文件,并构造一个表示它的运行时对象
  • 对于创建的每个运行时对象,对其内容执行一些查询(将其内容与系统上的一些文件进行比较)
  • 第#2项和第#3项是冗长的,我想通过使用Parallel.ForEach或其他并行执行此工作的方法来获得一些关于改进执行时间(目前只有几分钟)的可能性的意见

    我预计的潜在改进包括:

    使用多个CPU/内核 在执行IO操作(如读取文件)以执行其他操作时保持应用程序运行


    在开始开发之前,您认为这种应用程序可以从中受益吗?

    这肯定会通过使用TPL得到一些改进,TPL现在在.NET 4中提供

    这三个步骤都可以设计为并行运行

    尽管如此,鉴于上述情况,很难知道您会看到多大的改进。主要问题是繁重的文件I/O。即使您利用了多个内核,磁盘I/O也可能成为瓶颈,而尝试并行运行这一过程实际上可能会降低代码的这些部分


    如果您正在执行大量与查询/计算相关的IO,那么仅通过并行运行例程可能不会获得很大的性能优势。

    我会运行一个探查器,查看您的应用程序在哪里花费时间,然后再决定。如果您发现它正在等待I/O完成,那么您可能会从使用中受益。如果您发现自己受计算限制,那么,根据您预期的运行时环境(多核/单核),您可能会发现多线程计算会带来好处。当然,您可能会发现这两种情况都适用

    顺便说一句,您还可以使用.NET3.5中的许多.NET4线程功能。我目前正在一个高效的.NET3.5应用程序中使用它

    在开始开发之前,您认为这种应用程序可以从中受益吗

    不多。您描述了一个三阶段系统,其中每个阶段都受到严重的I/O限制

    我假设您只有一个磁盘,这意味着并行运行甚至可能会降低速度(更多的寻道操作)

    另一方面,第2)阶段和第3)阶段的CPU密集程度可能会有所提高


    你必须像往常一样测量

    这就是我害怕的。我将试着分析它以获得更多的数据。回答得好,看到你当时是29999K并且投票给了你+1 :-)