我从数据库获取一个 DataTable 并分配给 ViewState,如下所示,因为我不想每次都访问我的数据库,只想检查 DataTable 以进行后续查找。
DataTable dt = GetDataTable();
ViewState["dtTable"] = dt;
GetDataTable()
是一种从数据库检索 1000 条记录的方法。
这是最好的方法还是有更好的方法来处理这个问题?
有几种选择。使用哪一种最好取决于您的要求、环境设置等。
视图状态:
视图状态存储在隐藏字段中,呈现为<input />
发送到浏览器的最终 HTML 中的标记。当用户发起回发(通过单击按钮等)时,数据将作为提交的表单数据的一部分发送回服务器。
如果您在 ViewState 中存储大量数据,那么当用户尝试下载页面时,您将不得不遭受惩罚,因为所有这些数据都将成为 HTML 的一部分,并且当用户尝试提交表单时,因为这些数据再次出现将被发送回服务器。
另外,ViewState很容易丢失。仅当用户提交表单时它才会被保留。如果用户单击指向另一个页面的超链接,则不会提交表单,因此 ViewState 中包含的数据将丢失。
如果数据比较少,建议使用ViewState。
如果我们考虑安全选项,ViewState 数据以 base64 编码,可以轻松解码。这是黑客攻击网站的典型示例,因此请仔细检查您到底存储了哪些数据。您可以通过设置来解决这个问题EnableViewStateMac
为真。
Session
对于大量数据、Session是一个不错的选择。如果您能够检测到任何用户何时完成特定数据块,请将 Session 变量设置为 null,以解决内存开销问题。如果不能一直这样做,Session也会过期,内存会自动回收。降低会话超时也有帮助,但在将其设置为干扰正常站点使用的值时要小心。
此外,会话中的数据实际上在页面加载之间存在于 Web 服务器上。这有助于保持较小的页面大小;它只需使用会话 ID。
Caching
最后一个选择是使用缓存。查看 Microsoft Learn 文章ASP.NET 缓存:技术和最佳实践史蒂文·A·史密斯 (Steven A. Smith) 撰写,了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)