Кэширование ASP.NET - где и как долго?

При устранении проблем с производительностью в приложении ASP.NET с использованием новых функций связывания и минимизации я заметил довольно много файловой активности при доступе к файлам javascript, используемым в комплектах.

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

Очевидно, что здесь происходит какое-то кеширование, но где содержимое кеша кэшируется и как долго? И могу ли я контролировать это время через настройку?

2 ответа

Решение

Оказывается, я использовал предварительные версии всего стека MVC4, включая System.Web.Optimization. Обновление до RTM решило проблему.

Ответы кэшируются внутри HttpContext.Cache через вызов Insert с настройкой CacheDepedency к VirtualPathProvider с файлами, которые использовались для создания пакета.

/// <summary>
/// Stores the response for the bundle in the cache, also sets up cache depedencies for the virtual files
/// used for the response
/// </summary>
public void Put(BundleContext context, Bundle bundle, BundleResponse response) {
    List<string> paths = new List<string>();
    paths.AddRange(response.Files.Select(f => f.VirtualFile.VirtualPath));
    paths.AddRange(context.CacheDependencyDirectories);
    string cacheKey = bundle.GetCacheKey(context);
    CacheDependency dep = context.VirtualPathProvider.GetCacheDependency(context.BundleVirtualPath, paths, DateTime.UtcNow);
    context.HttpContext.Cache.Insert(cacheKey, response, dep);
    bundle.CacheKeys.Add(cacheKey);
}
Другие вопросы по тегам