1

我试图挤出一点点性能,因此我正在查看自定义 ViewLocationCache。

默认值将查找存储在 中HttpRuntime.Cache,如果可能的话,我想尽量避免那里相关的开销。Html.RenderPartial主要是因为我有几个循环调用的视图。

我想做的是使用 aConcurrentDictionary代替。我查看了 MVC 源代码,我看不到也想不出这会不好的原因。我部署到 Azure,所以 AppDomain 保证在部署时得到重置,我不需要担心坏命中。

关于为什么我不应该这样做,我是否错过了一些痛苦的显而易见的事情?

//fastCache is a static ConcurrentDictionary<string, string>
public string GetViewLocation(HttpContextBase httpContext, string key)
{
    return fastCache[key];
}

public void InsertViewLocation(HttpContextBase httpContext, string key, string virtualPath)
{
    fastCache[key] = virtualPath;
}
4

1 回答 1

3

HttpRuntime.Cache为您提供了可以配置的细粒度过期策略,而并发字典无法获得这些策略。例如,如果您的服务器根据您为项目定义的优先级开始内存不足,它将使它们过期,而并发字典将继续增长,直到您的应用程序因内存不足错误而崩溃。但是,如果您确定这HttpRuntime.Cache会以某种方式损害您的应用程序性能(这将是非常令人惊讶的),那么尝试寻找替代方案似乎是一个正当理由。只是不要忘记,HttpRuntime.Cache不仅仅是一个简单的线程安全哈希表。

于 2012-05-11T06:13:00.270 回答