在方法中:静态变量,视图状态,会话和缓存,用于避免重复加载和减少对数据库的查询。
您认为上述4种方法的最佳方法是什么?我认为缓存是最好的吗?或者在Asp.net 3.5或更高版本中更好的任何其他方法?
答案 0 :(得分:2)
如果要检索的数据是特定于用户的,请考虑使用Session。如果它是所有用户共享的相同数据,请考虑使用缓存。
我不鼓励使用视图状态来缓存数据库结果,因为它会快速膨胀渲染标记的大小。最重要的是,视图状态内容不仅必须下载,而且在提交表单时也会回发到服务器,因此在视图状态下,您需要支付两次性能损失。
您未提及的另一个选项是使用HttpContext.Items集合。这为缓存数据库数据 per-request 提供了一种很好的方法。如果您在页面中有许多单独的模块(例如主页面和用户控件)正在检索相同的数据,则此技术非常有用,因为它允许一次请求数据,然后在该特定请求的生命周期内进行缓存。有关更多信息,请参阅HttpContext.Items - a Per-Request Cache Store。
答案 1 :(得分:1)
您的问题没有单一的答案。一种可扩展且性能良好的可靠数据访问策略可能涉及您提及的几种甚至所有工具,也可能涉及其他工具。
答案 2 :(得分:0)
显然,当您在整个会话中需要持久数据时,不会使用viewState,也不会在应用程序对象中保存每用户数据。
viewState - 每页
会话 - 每个会话(每个用户)
申请 - 每份申请书
Cookie - 每个用户(但不是每个会话 - 而不是整个会话)
您通常会使用Cache对象来缓存应用程序级别的对象。
就是这样......每个人都有不同的角色。