4

私はlinqpadで非常に単純なコードを実行しています。そして、実行後の記憶がどこにあるのかわかりません。メモリを取得するだけで、それを戻したくありません。

  var step = 200000;
for (int i = 0; i < 1000; i++)
{
        //WordStats is linq2sql entity (dataContext.WordStats)  
    var keys = WordStats.Skip(step*i).Take(step).ToList();
    GC.Collect();
}
4

2 に答える 2

4

もう 1 つの方法は、最初からオブジェクトをキャッシュしないように LINQ to SQL に指示することです。

this.ObjectTrackingEnabled = false;
于 2012-06-11T02:20:22.433 に答える
2

LINQ DataContext は、DataContext 内のすべての読み取りオブジェクトをキャッシュしますが、それらへの参照がありません。後でオブジェクトを照会すると、キャッシュされたバージョンが取得されます。

代わりにGC.Collect()、LINQ コンテキストのキャッシュをクリアする必要があります。その方法を説明するブログ投稿を次に示します。

要するに:

const BindingFlags FLAGS = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var method = context.GetType().GetMethod("ClearCache", FLAGS); 
method.Invoke(context, null);

LINQPad では、に置き換える必要がcontextありthisます。

于 2012-06-10T18:47:37.620 に答える