ASP.NET捆绑缓存 - 在哪里和多长时间?

时间:2013-04-10 14:13:15

标签: asp.net bundling-and-minification

在使用新的捆绑和缩小功能对ASP.NET应用程序中的性能问题进行故障排除时,我注意到很多文件活动正在访问捆绑包中使用的javascript文件。

在一个干净的MVC应用程序上进行了一些测试之后,我注意到在第一次请求之后,我希望它能够读取文件来构建软件包,它没有在后续请求中读取文件大约一分钟左右。然后它会再次阅读它们,然后再安静一分钟左右。

显然这里有某种缓存,但是捆绑内容在哪里被缓存以及持续多长时间?我可以通过配置来控制这段时间吗?

2 个答案:

答案 0 :(得分:4)

响应缓存在HttpContext.Cache内部,通过对VirtualPathProvider的CacheDepedency设置调用Insert以及用于生成包的文件。

/// <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);
}

答案 1 :(得分:1)

原来我使用的是整个MVC4堆栈的预发布版本,包括System.Web.Optimization。升级到RTM解决了这个问题。