Редактировать: Как долго объекты могут выжить -
Технически невозможно, чтобы объекты CLR в AppDomain не могли пережить перезапуск этого AppDomain (т. Е. В ASP.Net это может быть вызвано изменением в web.config), в результате чего нет способа выжить в AppPool перезапуск (отключение процесса). Нативные объекты также не смогут пережить переработку AppPool.
Перезапуск AppPool не обязателен, чтобы снова создать процесс (на самом деле это не так), только первый запрос к сайту, обслуживаемому этим AppPool, запустит процесс.
Таким образом, если ваша цель строго «мои объекты CLR должны находиться в каком-то кеше сразу после перезапуска AppPool», самым близким было бы повторное кеширование объектов в вашем Application_Start (или эквивалентном методе в модуле). Обратите внимание, что статические объекты не гарантированно создаются во время загрузки сборки, поэтому, если вы хотите использовать статические объекты для кэширования, вам все равно нужно инициировать создание, т. Е. Получить к ним доступ в Application_Start.
Если вам нужно, чтобы объекты жили дольше, чем у AppPool - вам нужен отдельный сервис. Такие системы должны держать объекты вне процесса (а иногда и машины), поэтому вы будете платить за удаленный доступ к таким объектам.
Возможно, вас заинтересует распределенное кэширование (например, memcachd ), чтобы проверить, соответствует ли оно вашим потребностям.
Обычное использование "кэширования" - это кэширование объектов, создание которых является дорогостоящим, неясно, чего вы хотите достичь с помощью вашего определения "кэширования".
Это часто делается путем сокрытия логики кэширования внутри метода, который предоставляет объект:
MyObject GetMyObject()
{
MyObject result= cacheProvider.Get("cacheId_MyObject");
if (result = null)
{
result = VerySlowMethodToCreateMyObject();
cacheProvider.Cache("cacheId_MyObject", result);
}
return result;
}
Попробуйте просто использовать System.Web.Caching.Cache. Его метод Insert предоставляет множество опций. Вы даже можете реализовать элементы «кэшированные навсегда», если вы предоставите onRemoveCallback.