1

注: 質問はこれと重複している可能性がありますが、この問題に関する最新情報を入手するために投稿しています。

コンポーネント内のフロー ドキュメントの複数の (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 のメモリがアプリケーションに割り当てられます。

4

2 に答える 2

2

質問の中で、あなたは を雇用していると述べましたWinDbg。を使用WinDbgすると、これらのオブジェクトの参照を見つけて、コード内でそれらを削除することができます。.net メモリ リークの診断を参照してください

また、フロー ドキュメント オブジェクトまたはフロー ドキュメント オブジェクトのプロパティは、IDisposableインターフェイスを実装することによって解放されるアンマネージ リソースを使用している可能性があります。さらにアドバイスが必要な場合は、コードを共有する必要があります。

于 2013-01-21T14:17:59.560 に答える