.net 我认为第三方物流的瓶颈

.net 我认为第三方物流的瓶颈,.net,vb.net,task-parallel-library,.net,Vb.net,Task Parallel Library,我正在开发一个小型winforms应用程序,移动\根据文件内容格式化一些文件。我复制了几百份相同的文件,看看处理这些文件需要多长时间。如果我只迭代10到20个文件,它每秒处理22000 kb,但是当我迭代150到200个文件时,每秒的kb会下降到11000 kb。当然,更多的文件需要更长的时间,但为什么每秒的kb会下降这么多?文件是一样的,怎么回事?下面是代码的框架 'classA For Each f As String In files D

我正在开发一个小型winforms应用程序,移动\根据文件内容格式化一些文件。我复制了几百份相同的文件,看看处理这些文件需要多长时间。如果我只迭代10到20个文件,它每秒处理22000 kb,但是当我迭代150到200个文件时,每秒的kb会下降到11000 kb。当然,更多的文件需要更长的时间,但为什么每秒的kb会下降这么多?文件是一样的,怎么回事?下面是代码的框架

       'classA
       For Each f As String In files
            Dim p As New Item(f)
            AddHandler p.InitCompleted, AddressOf DoWork

            Task.Factory.StartNew(Sub()
                                      p.StartInit()
                                  End Sub).Wait() 

        Next f

        'classA - - _scheduler declared at the class level and assigned FromCurrentSynchronizationContext
        Public Sub DoWork()
           'move/format files
            Task.Factory.StartNew(Sub() RaiseEvent AnEvent(intVal1, intVal2), Nothing, Threading.Tasks.TaskCreationOptions.None, _scheduler).Wait()

        End Sub

        'classItem 
          Private Sub Init() 
               'search file contents
                Task.Factory.StartNew(Sub()  RaiseEvent InitCompleted(), Nothing, Threading.Tasks.TaskCreationOptions.None, _scheduler).Wait()
          End Sub

          'gui winform
           AddHandler classa.AnEvent, AddressOf OnAnEvent

           Private Sub OnAnEvent(ByVal param1 Integer, ByVal param2 As Integer)
                txtBox1.Text = param1
                txtBox2.Text = Param2
           End Sub
如有任何意见,将不胜感激。c#的答案很好

当然,更多的文件需要更长的时间,但为什么每秒的kb会下降这么多

很可能是因为你要开始很多文件。您将受到IO限制-磁盘一次只能读取或写入一件事情。通过一次给它200个文件来读取,你让它更难真正完成工作

我怀疑你可能会发现,如果你只是在一个线程中完成所有IO,你会发现它实际上更快

此外,您应该使用性能监视来查看瓶颈在哪里。我强烈期望它是IO-但你应该检查一下。(查看CPU使用率、磁盘使用率等)

当然,更多的文件需要更长的时间,但为什么每秒的kb会下降这么多

很可能是因为你要开始很多文件。您将受到IO限制-磁盘一次只能读取或写入一件事情。通过一次给它200个文件来读取,你让它更难真正完成工作

我怀疑你可能会发现,如果你只是在一个线程中完成所有IO,你会发现它实际上更快


此外,您应该使用性能监视来查看瓶颈在哪里。我强烈期望它是IO-但你应该检查一下。(查看CPU使用率、磁盘使用率等)

Windows附带的资源监视器可用于查找应用程序中10-20个文件的瓶颈,然后并行处理150-200个文件。正如@JonSkeet提到的,你很可能会被IO束缚。实际上,即使10个并行文件对于硬盘驱动器来说也太多了,但是SSD在这里可能会显示出更好的性能


如果您使用的是大文件,那么切换到顺序访问可能会更好。您应该使用TPL来并行CPU绑定的任务。

Windows附带的资源监视器可用于查找应用程序中10-20个文件的瓶颈,然后并行处理150-200个文件。正如@JonSkeet提到的,你很可能会被IO束缚。实际上,即使10个并行文件对于硬盘驱动器来说也太多了,但是SSD在这里可能会显示出更好的性能


如果您使用的是大文件,那么切换到顺序访问可能会更好。您应该使用TPL来并行CPU限制的任务。

谢谢您的输入。这很有帮助,但仍有一些事情在进行,但我需要更多的尝试和错误,希望我能找到答案。谢谢你的投入。这很有帮助,但仍有一些事情在进行,但我需要更多的尝试和错误,希望我能找到答案。谢谢你的投入。我现在正在试着出错。io问题是个问题。再做一点测试和评估,我想我会解决我的逻辑错误,谢谢你的输入。我现在正在试着出错。io问题是个问题。再做一点测试和评估,我想我的逻辑错误就会解决了。为什么你要开始任务并立即等待它们?似乎无法达到目的。为什么你要开始任务并立即等待它们?似乎达不到目的。