2014-09-26 2 views
0

У меня есть приложение со многими элементами управления wpf, но только некоторые из них видны за один раз. Поскольку пользователи прокручивают элементы, мы «кэшируем» изображения в слабых ссылках на модель представления.Как остановить слабые ссылки, даже если у меня много доступной памяти.

Несмотря на то, что рабочий набор составляет 260 МБ, и имеется много доступных оперативной памяти объектов, на которые ссылаются слабые ссылки, собираются мусор. Процесс работает как x86.

Есть ли причина, почему GC так агрессивен?

Это временное решение, конечно, и мы работаем над пользовательским кэшированием, но меня это удивляет.

+4

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

+3

Также подумайте об этом - если вам все еще нужны ваши ссылки, когда они уже GC'ed, возможно, они не должны быть слабыми рекомендациями в первую очередь, и вам может понадобиться альтернативный способ их кеширования. – decPL

ответ

0

Спасибо Yuval за ваш комментарий. Я дал ему ответ, чтобы помочь кому-то, кто считает, что слабые ссылки могут использоваться для кеширования, даже если имеется много доступной памяти.

К сожалению, слабые ссылки собираются в мусор, даже если ваше приложение нигде не ограничено пределом памяти. Кажется, что слабые ссылки всегда собираются с разверткой поколения 0.