почему пользовательские элементы управления не собраны Gargabe Collector? - PullRequest
3 голосов
/ 15 мая 2009

У меня большое приложение .NET C # с утечкой памяти. Используя профилировщик памяти ants, я вижу, что в памяти есть несколько версий одних и тех же пользовательских элементов управления, и сборщик мусора не собирает их. Кэширование вывода на веб-формах, но не кеширование вывода на реальных пользовательских элементах управления.

Есть ли причина, по которой пользовательские элементы управления не удаляются?

Как я могу определить, почему и что мешает их утилизации сборщиком мусора?

Ответы [ 3 ]

1 голос
/ 15 мая 2009

Существует множество причин, по которым пользовательский элемент управления не является сборщиком мусора. Посмотрите на сам код, создаете ли вы экземпляры объектов (например, наборов записей), которые реализуют IDisposable, от которого вы фактически не избавляетесь?

0 голосов
/ 16 мая 2009

В принципе, объект не будет собран, если кто-то имеет хотя бы одну ссылку на него. Посмотрите и найдите, кто держит ссылку. ANTS Profiler или .NET Memory Profiler (SciTech) дадут хорошее представление.

0 голосов
/ 15 мая 2009

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

http://msdn.microsoft.com/en-us/library/k4he1ds5(VS.71).aspx

...