Что такое «утечка памяти»?В средах с ручным управлением мы говорим, что выделенные ссылки - это утечка.По этому определению в среде ГХ нет утечек.
Однако есть несколько сценариев, которые имеют такой же эффект:
Устаревшие ссылки
// create temporary item
Item item = new Item();
// add it to the global map, so Processor::Fetch finds it by ID
itemMap.Add(item.id, item);
Process(item.id);
// remove from cache
itemMap.Remove(item.id);
Если выдает Process (), элементостается ссылкой в itemMap
.Если вы регулярно не выбрасываете всю карту (или не приняли мудрое решение использовать слабые указатели для карты), карта элементов будет накапливать и хранить ссылки на временные блоки, блокируя память.
Неуправляемые ресурсы
Представьте, что у вас есть небольшой управляемый объект, который выделяет большие неуправляемые ресурсы и не реализует IDisposable, или IDisposable не используется.
Эти объекты могут жить достаточно долго, чтобы их подтолкнуть кGen 2. Если в управляемой куче нет никакого давления другое , коллекция Gen 2 может никогда не запуститься.В конечном итоге вы можете столкнуть крошечные объекты в Gen 2, пока неуправляемые ресурсы не исчерпают вашу память.
Этот сценарий может показаться глупым, но именно так работает COM Interop (и у меня есть идентификатор случая, чтобы доказать это).