Чому люди думають, що витік пам’яті у .NET не є таким, як у будь-яких інших витоків?
Витік пам'яті - це коли ви приєднаєтесь до ресурсу і не відпускаєте його. Це можна зробити як в керованому, так і в некерованому кодуванні.
Що стосується .NET та інших інструментів програмування, то існували ідеї щодо збирання сміття та інших способів мінімізації ситуацій, які призведуть до протікання вашої програми. Але найкращий метод запобігання витоку пам’яті - це те, що вам потрібно зрозуміти вашу базову модель пам’яті та як все працює на платформі, яку ви використовуєте.
Віра в те, що GC та інша магія очистять ваш безлад - це короткий шлях до витоку пам’яті, і їх буде важко знайти пізніше.
Коли ви кодуєте некеровані, ви, звичайно, обов'язково прибираєте, знаєте, що ресурси, якими ви користуєтесь, буде відповідальність за прибирання, а не двірник.
З іншого боку, в .NET багато людей думають, що GC все очистить. Ну, це щось робить для вас, але вам потрібно переконатися, що це так. .NET обробляє багато речей, тому ви не завжди знаєте, чи маєте ви справу з керованим або некерованим ресурсом, і вам потрібно переконатися, з чим ви маєте справу. Як правило, потрібно звертати увагу на шрифти, ресурси GDI, активний каталог, бази даних тощо.
У керованому плані я поставлю шию на лінію, щоб сказати, що вона проходить, як тільки процес буде вбито / вилучено.
Я бачу, що багато людей мають це, і я дуже сподіваюся, що це закінчиться. Ви не можете просити користувача закрити вашу програму, щоб очистити ваш безлад! Погляньте на браузер, який може бути IE, FF і т. Д., Потім відкрийте, скажімо, Google Reader, нехай залишається кілька днів, і подивіться, що відбувається.
Якщо ви відкриєте іншу вкладку в браузері, перейдіть на якийсь сайт, а потім закриєте вкладку, на якій розміщувалася інша сторінка, через яку браузер просочився, чи вважаєте ви, що браузер звільнить пам'ять? Не так з IE. На моєму комп’ютері IE легко з'їсть 1 Гб пам'яті за короткий проміжок часу (приблизно 3-4 дні), якщо я використовую Google Reader. Деякі новини - ще гірші.