注: 質問はこれと重複している可能性がありますが、この問題に関する最新情報を入手するために投稿しています。
コンポーネント内のフロー ドキュメントの複数の (1000k 以上、ループ内ではなく、必要に応じて) オブジェクトを作成していますが、メモリ不足の例外が原因でアプリケーションがクラッシュしていました。メモリー。
詳細を取得するために、シミュレーション用のテスト アプリケーションを作成しました。使用後にオブジェクトがメモリ内にあることがわかりました (WinDbg がこれを特定するのに役立ちました)。つまり、FlowDocument の 5000 オブジェクトが作成された場合、1 秒間隔で GC.Collect を呼び出した後でも、アプリケーションに ~600MB が割り当てられていることがわかりました。メモリは、アプリケーションを閉じた後にのみ解放されます。
FlowDocument に割り当てられたメモリをクリアする解決策を見つけた人はいますか?
コードは次のとおりです。
private void CreateObjects()
{
for (int index = 0; index < 5000; index++)
{
FlowDocument fd = new FlowDocument();
//Opacity is accessed just to use any property of object. It does not have any significance.
var ff = fd.Foreground.Opacity;
}
}
上記のように、メモリを解放するために 1 秒後に GC.Collect も呼び出しています。GC.Collect を呼び出さないと、最大 1.2 GB のメモリがアプリケーションに割り当てられます。