C#プログラムのメモリ使用量を処理しています。メモリリークを発見するために、アプリケーションの開始点と終了点の間にメモリコントロールを設定しました。 FirebirdのとEntity Frameworkの6を使用しているとき、私は警告しました:Entity Frameworkはメモリを解放しませんか?
var m = GC.GetTotalMemory(true)/1024/1024; // 2MB
using (Entities context = new Entities(ConnectionString))
{
m = GC.GetTotalMemory(true)/1024/1024; //2MB
context.MYTABLE.FirstOrDefault();
m = GC.GetTotalMemory(true)/1024/1024; // 5MB
}
m = GC.GetTotalMemory(true)/1024/1024; // 5MB ??
context.MYTABLE
行をコメントアウトすることで、メモリは2メガバイトのままになります。
私はアプリケーションが終了するときにすべてが破棄されることは知っていますが、私は自分のオブジェクト上でメモリリークを検出したいと思います。
EFで使用されているこの余分なメモリを処分する方法はありますか?
この問題は、Firebird EFドライバによって発生する可能性がありますか?
ティア
細かい点でメモリの割り当てと解放を制御しない世界では、小さなコードブロックで使用されるメモリを測定することはあまり意味がありません。 EFは物事をスピードアップするために物事を記憶しており、そのことを試してはいけません。 – Steve
'Debug'または' Release'ビルドを実行していますか? – mjwills
同じコードを2番目、3番目などの時間に測定してみましたか?最初のEFはメタデータ・モデルを構築し、キャッシュするためです。 –