タスクパラレル。パラレル用。ロードバランシング、パルティイオン.NET
-
27-10-2019 - |
質問
並列メソッドを並行して行います。
パフォーマンスを向上させるために、独自の負荷分散とパーティション化を内部的に提供しますか?
もしそうなら、どのような状況を書きたいですか?パフォーマンスを改善するためにパーティショナークラスを使用して独自のパーティションを作成しますか?
解決
ルーチンは独自のパーティションを提供しました。
それらは「典型的な」シナリオに基づいていますが、特に異常な状況では、ガイダンスが必要になる場合があります。
たとえば、デフォルトのパーティションは次のとおりです IEnumerable<T>
実装(実装しない IList<T>
)タスクごとの小さなグループから始めて、サイズがゆっくりと成長します。しかし、あなたがあなたを知っているなら IEnumerable<T>
一度に1つのアイテムをゆっくりと供給しますが、これはブロックを引き起こします。 Parallel
クラスは、パーティションに十分な要素を受け取り、スケジュールするまで、次のアイテムで「待機」します。
独自のパーティショナーを提供することで、これを防ぎ、スループットを改善することができます。
カスタムパーティショナーが役立つ別の素晴らしい例は、ループアイテムごとに非常に少量の作業がある場合です。この場合、自分自身をパーティション化してパーティションで作業することで、不必要なオーバーヘッドが回避されます。これはで覆われています 方法:小さなループボディをスピードアップします MSDNのページ。
所属していません StackOverflow