Asp.Net Кэширование и утечки памяти при удалении элементов из Cache - PullRequest
1 голос
/ 28 мая 2009

Итак, я пытаюсь ввести некоторое кэширование в мое приложение Asp.Net. Новые данные для пользователя возвращаются из БД в виде больших наборов данных. Всякий раз, когда пользователь запрашивает данные, я вставляю этот набор данных в HttpRunTime.Cache. На данный момент я устанавливаю время их кеширования на 2-3 часа. И это действительно большие наборы данных, и я довольно часто помещаю их в Cache с разными ключами. Что меня беспокоит, так это последствия утечки памяти. Будет ли Asp.Net позаботиться о избыточных данных в Cache и удалить их? Также, когда Asp.Net или я удаляем кэшированный элемент с помощью Cache.Remove(), удаляется ли только ссылка на набор данных или набор данных также собирается из памяти? Существует ли сценарий, в котором наборы данных могут быть «удалены» из кэша, но все еще существуют в памяти, создавая проблемы с производительностью? Есть ли способ явно «собрать мусор» их, если это так?

1 Ответ

5 голосов
/ 28 мая 2009

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

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

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

...