2016-09-22 12 views
0

PLINQは、オーバーヘッドを減らすために、内部でバッチ処理する項目をバッチ処理します。私の項目は非常にメモリが集中しているので、PLINQクエリパイプラインに存在するバッファリングを最小限に抑えたいと思っています。パーティショニング/バッチ処理を完全に無効にするにはどうすればよいですか?PLINQのパーティショニング/バッチ処理を無効にする方法

コードは次のようになります。このコードで

var myItems = Enumerable.Range(0, 10000000).Select(_ => new byte[1 << 30]); 
var results = 
myItems 
.AsParallel() 
.WithMaxDegreeOfParallelism(4) 
.Select(F) 
.ToList(); 

私はあなたがしたいのか4.

+0

あなたは何をしていますか、理想的にはいくつかのコードを詳しく説明できますか? PLINQにはさまざまな種類のバッチ処理があり、それらを無効にするさまざまな方法があります。 – svick

+0

@svick権利、私はすぐにコードを提供する必要があります。お役に立てれば。 – boot4life

答えて

1

ことがガベージコレクションの対象になりません(大)アイテムの最大数を期待しますやるNoBufferingを指定してソース、オーバーcreate a Paritionerにあり、そして、あなたのPLINQクエリでそれを使用します。

var myItems = Enumerable.Range(0, 1000).Select(_ => new byte[1 << 30]); 
var myPartitioner = Partitioner.Create(myItems, EnumerablePartitionerOptions.NoBuffering); 
var results = 
    myPartitioner 
    .AsParallel() 
    .WithDegreeOfParallelism(4) 
    .Select(F) 
    .ToList(); 

このクエリは、私のために動作しますが、をスローします(元のクエリと同じように)パーティションをスキップします。

関連する問題