Код работает со стабильными 18 МБ на моей машине, с этой строкой или без нее (XP SP3 x86, .Net 3.5 SP1, двухъядерный) .
Вероятно, что происходит наваша машина состоит в том, что, когда строка закомментирована, программа тратит большую часть своего времени на выделение, и ей удается выделить слишком много памяти, прежде чем поток сборщика мусора сможет освободить ее.Когда вы раскомментируете эту строку, программа тратит гораздо меньше времени и, следовательно, не может выделить слишком много, прежде чем запускается поток GC.
Попробуйте заменить закомментированную строку на Thread.Sleep(0)
;если не произойдет сбой, я, вероятно, прав.
Так же, как примечание, вы никогда не должны полагаться на финализатор - он не гарантированно вызывается сразу, когда объектИли даже вообще.Вместо этого в реальном коде реализуйте интерфейс IDisposable
и используйте финализатор, только если крайне важно, чтобы вызывался Dispose()
, даже если программист забыл его (например, освобождает общие ресурсы сети / файла)и т. д.)