我需要使用System.Web.Caching.Cache缓存一些数据.不确定是否重要,但数据不是来自数据库,而是数量众多的自定义对象.
ASP.NET MVC对我来说是相当新鲜的,我想知道这个缓存发生在哪里?
型号或控制器?
在某种程度上,在模型级别缓存是有意义的,但我不一定知道这样做的含义(如果有的话).如果缓存要在Controller级别完成,那么会影响所有请求,还是只针对当前的HttpContext?
那么应用程序数据缓存应该在哪里完成,实际做什么是好办法呢?
更新
感谢伟大的答案!我仍然试图收集最适合缓存给定不同场景的地方.如果一个缓存整个页面,那么将它保留在视图中是有意义的,但是当不是整个页面时,绘制线条的位置是什么?
解决方法
我认为这最终取决于你正在缓存什么.如果要缓存渲染页面的结果,这与请求的Http属性紧密耦合,并且会建议一个ActionFilter级缓存机制.
另一方面,如果要缓存驱动页面的数据,那么您应该考虑模型级缓存.在这种情况下,控制器不关心数据生成时,它只对数据执行逻辑运算,并准备进行查看.模型级别缓存的另一个参数是,如果您没有附加到您的Http上下文的模型数据有其他依赖关系.
例如,我有一个网络应用程序,我的大部分模型被抽象成一个完全不同的项目.这是因为将会有一个使用相同后台的第二个网络应用程序,而且我们有可能使用非基于Web的应用程序使用相同的数据.我的大部分数据来自Web服务,这可以是性能杀手,所以我有一个模型级缓存,控制器和视图绝对没有任何关系.