Разъяснение .NET GC Требуется для классов .net в проекте .net - PullRequest
0 голосов
/ 27 августа 2010

Я борюсь с некоторыми проблемами с памятью в своем приложении и, наконец, мне удалось докопаться до сути. Недавно у меня был пример, когда моя память процесса достигла 800 Мб при обработке задачи. Мне удалось заставить это обосноваться в 140 МБ сейчас, что вполне приемлемо. Однако это заставило меня усомниться в моем понимании .NET Garbage Collector. Моя проблема с памятью была исправлена ​​путем освобождения 2 объектов .NET (TADOCommand и TDataSet - в delphi) после каждого использования. Область действия этих переменных локальна для процедуры, поэтому я предположил, что они должны быть очищены автоматически, потому что ничто не должно иметь ссылки на них.

Итак, как .NET обрабатывает освобождение объектов, которые не являются .NET? Или нет?

Спасибо.

1 Ответ

3 голосов
/ 27 августа 2010

Это не так. Сборщик мусора .NET обрабатывает только управляемые объекты. Все остальное должно быть очищено чем-то другим.

Если указанные ресурсы инкапсулированы управляемыми типами, вы можете использовать IDisposable для осуществления очистки.

...