Мой объект всегда будет "там"? - PullRequest
2 голосов
/ 02 декабря 2009

Если у меня есть объект, сохраненный в памяти, и я ухожу из приложения на час, будет ли этот объект еще там, когда я вернусь?

Другими словами, сборщик мусора .NET выбрасывает мой объект, потому что он некоторое время не использовался?

Ответы [ 3 ]

11 голосов
/ 02 декабря 2009

Сборщик мусора собирает только объекты, на которые больше нет ссылок в вашем приложении. Сборщик мусора не будет никогда собирать любые используемые объекты.

Определение «используемого» сборщика мусора основано на корнях. Экземпляр объекта имеет корни, если другие экземпляры объекта в AppDomain ссылаются на него. Пока AppDomain, на котором размещено ваше приложение, не выгружен, все экземпляры объектов, которые были в памяти, будут оставаться в памяти, пока они сохраняют корни в приложении.

4 голосов
/ 02 декабря 2009

Пока что-то ссылается на ваш объект, оно не будет собираться сборщиком мусора. Таким образом, если вы создаете статическое поле в классе и присваиваете его со ссылкой на ваш объект, оно будет оставаться в памяти до тех пор, пока нет другого назначения полю, и до тех пор, пока загружен домен приложения (который обычно пока процесс запущен).

3 голосов
/ 02 декабря 2009

+ 1 для ответа @ Эндрю - пока - память вашего приложения может быть перенесена в виртуальную память (на ДИСКЕ), поэтому, когда вы получаете доступ к объекту, потребуется немного времени, чтобы получить его, но в конечном итоге он будет там .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...