は...のは、私は次のコードがあるとしましょうループスコープとメモリの問題
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
MyCustomClass myObj = new MyCustomClass();
sb.Append(myObj.RenderShortString());
}
Console.Write(sb.ToString());
そしてMyCustomClassが非常に大きいオブジェクトであることを前提としています。たとえば、1MBの文字列を含む内部メンバーを作成して保持しているとします。 RenderShortString()メソッドは、約100文字の文字列を単純にレンダリングします。
このループは10000回ループします。
私はループ内でSystem.OutOfMemory例外を引き起こしている基本的にこのようなものがあります。
私の質問は、myObjの各インスタンスに割り当てられたメモリスペースがガベージコレクタによってクリーンアップされたときに関係します。私はStringBuilderに問題があるとは思わないが、間違っているかもしれない。私は、myObjのインスタンスがメモリに割り当てられているが、ループが終了するまではクリーンアップに使用できないと感じる。これは正しいです?もしそうなら、私はレンダリングされた文字列を取得するとすぐに、そのインスタンスを完了したことをアプリケーションに伝えることができますか?
ループ内の 'GC.Collect()'を明示的に呼び出すと問題が解決されますか?恒久的な解決策として素晴らしいアイデアではありませんが、以前のオブジェクトが収集可能であることが証明され、問題はGCが実行する機会を得られないという「ちょうど」です。 – stevemegson