У меня есть приложение со многими элементами управления wpf, но только некоторые из них видны за один раз. Поскольку пользователи прокручивают элементы, мы «кэшируем» изображения в слабых ссылках на модель представления.Как остановить слабые ссылки, даже если у меня много доступной памяти.
Несмотря на то, что рабочий набор составляет 260 МБ, и имеется много доступных оперативной памяти объектов, на которые ссылаются слабые ссылки, собираются мусор. Процесс работает как x86.
Есть ли причина, почему GC так агрессивен?
Это временное решение, конечно, и мы работаем над пользовательским кэшированием, но меня это удивляет.
Поведение GC не детерминировано. Он будет работать, когда текущий сегмент в генерации 0 будет заполнен. Вы не можете полагаться на то, что он не работает, чтобы сохранить ваши слабые ссылки живыми. Если они необходимы, используйте сильный механизм кэширования ссылок. –
Также подумайте об этом - если вам все еще нужны ваши ссылки, когда они уже GC'ed, возможно, они не должны быть слабыми рекомендациями в первую очередь, и вам может понадобиться альтернативный способ их кеширования. – decPL