Возможно ли иметь утечку памяти в управляемом коде?(в частности, C # 3.0) - PullRequest
12 голосов
/ 22 июня 2011

Например, если у меня есть иерархическая структура данных:

class Node
{
    public List<Node> children;
}

, и она заполняется на много уровней вниз, то в одном из родителей идет:

myNode.children.Clear();

, который очиститвсе ссылки на непосредственных детей - но как насчет всех внуков, внуков и т. д., на которые ссылались эти непосредственные дети?Достаточно ли умен C #, чтобы знать, что они больше не нужны, и что они будут собирать мусор?

Я прочитал, используя привязку данных WPF без реализации интерфейса INotifyChanged, может вызвать утечки памяти: http://blogs.msdn.com/b/micmcd/archive/2008/03/07/avoiding-a-wpf-memory-leak-with-databinding-black-magic.aspx, как это возможнов управляемой среде?

Ответы [ 11 ]

0 голосов
/ 22 июня 2011

Да, у вас может быть целый граф объектов (массивная структура данных), но если ни один из них не связан или не упомянут, он будет собирать мусор.

Если это не так, либо GC не запускается (вы можете попробовать GC.Collect() в диагностических целях, но вы не должны использовать его в рабочем коде), либо что-то относится к части структуры. Например, пользовательский интерфейс может быть привязан к нему.

...