このコードを想像してください:
int i=9999999;
while ( i > 1 )
{
string UnusedMemory="this is a string that eats some ram" + i.ToString();
i--;
}
の実行時に参照されていないオブジェクトが時々削除される場合GC.Collect()
、このコードは収集が行われるまで大量の RAM を割り当てる必要があります。しかし、巨大なメモリをまったく割り当てません。なぜですか? ILレベルで実装されたある種の「削除」はありますか? またはGC.Collect()
、自動的に呼び出されるのが速くなりますか? これは些細な例であることはわかっていますが、より複雑で、そのコード ブロックで文字列がアクセスされた場合でも、多くの RAM を消費することはありません。
編集:文字列が常に一意になるように例を変更して、「キャッシュ」できないようにしました