2011-12-13 132 views
6

我有一个sql查询(存储过程),需要大约8-10秒才能返回结果显示在webgrid中。在asp.net-mvc3中进行缓存的性能的最佳实践是什么,因此用户不必每次都需要8-10秒来加载数据(较少优化查询)?MVC3数据缓存技术

回答

11

您可以使用MemoryCache类在某个键下存储此查询的结果。关键可能是查询标准的哈希(如果有的话)。这里是关于如何使用它的MSDN上的some guides

实施缓存时请记住默认情况下此缓存存储在内存中。这意味着如果您在Web场中运行此应用程序,则使用分布式缓存可能会更有趣,以便场中的所有节点共享相同的缓存数据。这可以通过用一些分布式缓存解决方案扩展ObjectCache类来完成。例如memcached是一个受欢迎的,它有.NET provider。另一个分布式缓存解决方案是AppFabric

+0

MemoryCache可能是正确的解决方案,但我有一些场景中的对象会自动从缓存中清除(使用MVC 3)。你对此有何建议?是否有任何特定的配置需要使它与MVC一起工作?哦,如果你想给它一个镜头,你可以阅读http://stackoverflow.com/questions/7849000/memorycache-empty-just-after-adding-an-object?我仍然在与这个问题斗争,并不明白我失败的地方。 :(谢谢。 – BigMike

+0

@BigMike,你可以在存储对象到缓存时指定一个过期策略,你可以定义绝对过期,滑动过期,更改监视器,......这是非常灵活的 –

+0

是的我可以,我已经尝试过在有些情况下,我已经把所有东西都驱逐出去,显然没有理由。有趣的是,在我的删除回调中,我得到了一个CacheSpecificEviction的原因,但是找不到谁实际上是驱逐出来的 – BigMike

3

它正在缓存此操作。

[OutputCache(Duration = 300)] 
public ActionResult Action(){ 

//some operation 

return View() 
} 
+0

这会缓存整个操作(例如操作不会被执行),所以即使数据改变了,它也不会在接下来的5分钟内执行。当访问数据时我不喜欢使用它 – BigMike

2

此存储过程后面的底层数据更改的频率如何?如果相对很少,您可以用非常好的功能 - 的SqlCacheDependency

http://msdn.microsoft.com/en-us/library/ms178604.aspx

这样只在需要时你沉重的SP将被调用,结果将尽可能长时间地缓存。

+0

Thx用于答复这可能需要每3-4小时更新一次然而,我确实得到了SqlCachDep致力于工作,所以谢谢,但我可能需要更频繁地更新它。 – JaJ