Кэширование 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);
}