0

ファイルの内容に基づいていくつかのファイルを移動\フォーマットする小さなwinformsアプリに取り組んでいます。ファイルの処理にかかる時間を確認するために、同じファイルのコピーを数百作成しました。10 ~ 20 個のファイルを反復処理する場合は 1 秒あたり 22000 kb を処理しますが、150 ~ 200 個のファイルを反復処理すると、1 秒あたりの kb は 11,000 に低下します。もちろん、より多くのファイルには時間がかかりますが、なぜ 1 秒あたりの 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# での回答は問題ありません。

4

2 に答える 2

3

もちろん、より多くのファイルには時間がかかりますが、なぜ 1 秒あたりの kb がそれほど低下するのでしょうか?

多くのファイルを開始している可能性があります。IO バウンドになります。ディスクは、一度に 1 つのことしか読み書きできません。一度に 200 個のファイルを読み取るようにすると、実際に作業を行うのがはるかに難しくなります。

すべての IO を 1 つのスレッドで実行すると、実際にはその方が高速であることがわかると思います。

さらに、パフォーマンス監視を使用して、ボトルネックがどこにあるかを確認する必要があります。IO であると強く期待していますが、確認する必要があります。(CPU使用率、ディスク使用率などを見てください)

于 2013-05-17T15:57:21.567 に答える