2017-08-10 2 views
3

は、低消費電力のマシン上で実行されている、このようなシナリオを考える:Parallel.ForEachループで発生するスレッドの数はどのように確認できますか?

var logFile = File.ReadAllLines("logpath"); 
var logList = new List<string>(logFile); 

Parallel.ForEach(logList.Batch(8), fileLine => 
{ 
    // work on the 8 lines 
}); 

は、私がParallel.ForEach過程で生み出された同時スレッドの最大数を見つけることができる簡単な方法はありますか?

+0

@René[email protected]私の回答に追加してもよろしいですか? –

+0

"ThreadPool.GetAvailableThreads()"は、プールスレッドの最大数と現在アクティブなプールスレッド数の差を示します。それを試していないが、ショットの価値があるかもしれない。 – Milster

+0

@RenéVogtはい、それはまさに私がThreadPoolや何かを介して何らかのビルトイントラッキングがあることを期待していた理由です。 –

答えて

4

Console.WriteLineまたはLoggingを使用して、ループ内の各スレッドを追跡します。

Parallel.ForEach(logList.Batch(8), fileLine => 
{ 

    // work on the 8 lines 
    Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId); 

}); 
+1

もちろん私は気にしませんこの「アイデア」を使用しますが、重要な部分は実際にそれを実装する方法です。あなたが示す方法は、テスト/研究目的には良いかもしれません。しかし、OPが生産的な解決策を必要とする場合、難しい部分は、同時スレッドがそのIDストレージにアクセスするため、最小限のロックオーバーヘッドでIDをどこかに格納することです。 –

+0

@RenéVogt確かに - 私はOPが好奇心だったと思っていましたが、おそらく彼らは一般的なプロジェクトの一部としてそれを望んでいます –

+0

@RenéVogtまさに。さらに、ループを終了して、一度に実行していたスレッドの最大数を確認したいと思います。元の質問がこれを明確にしてくれなかったことを申し訳ありません。 –

関連する問題