在每个控制器调用上,我有一个代码,可以从Web服务获取一些用户属性。我想为每个用户缓存这些,所以我只打了一次web服务。
在控制器方法中缓存代码的最佳方法是什么,这样可以避免在每个URL请求时访问数据库,但在另一个用户登录时也不会缓存一个用户信息?
答案 0 :(得分:2)
您可以使用ASP.NET会话存储每个用户的值。
答案 1 :(得分:1)
查看Enterprise library的缓存部分。我们在工作中使用它来缓存查找,因此您只需按一次WCF服务,而不是数千次完全相同的数据。
您也可以使用Session,除非您的用户非常小,否则我强烈反对。
if (Session("user") == null)
{
Session("user") = CallWebService.GetUser(userId);
}
为什么你应该为this webpage:
保持较小的会话避免在会话变量中存储过多数据,并确保会话超时合理。这可以使用大量的服务器内存。请记住,存储在会话变量中的数据可能会在用户关闭浏览器后很长时间内挂起。会话变量太多会使服务器瘫痪。