我从数据库中获取数据表并分配给 ViewState,如下所示:因为我不想每次都访问数据库。

DataTable dt = GetDataTable();
ViewState["dtTable"] = dt;
GetDataTable() 是一种方法,它从数据库中检索 1000 条记录。
这是最好的方法还是哪种方法是处理这个问题的最好方法?

最佳答案

首先要做的事:撇开解释不谈,这仍然在很大程度上取决于您的要求、环境设置......

View 状态存储在发送到浏览器的最终 HTML 中呈现为 <input /> 标记的隐藏字段中。当用户启动回发(按钮单击等)时,数据将作为提交表单数据的一部分发送回服务器。

如果您在 ViewState 中存储大量数据,当用户尝试下载页面时,您将不得不受到惩罚,因为所有这些数据都将成为您的 HTML 的一部分,并且当用户尝试提交表单时,又因为这些数据将被发送回服务器。

此外,ViewState 很容易丢失。只要用户提交表单,它就会被保留。如果用户单击指向另一个页面的超链接,则不会提交表单,因此包含在 ViewState 中的数据将丢失。

如果数据比较小,建议使用ViewState。

如果我们考虑安全选项,ViewState 数据以 base64 编码,可以轻松解码。这是黑客入侵网站的经典示例,因此请交叉检查您究竟存储了哪些数据。虽然您可以通过将 EnableViewStateMac 设置为 true 来解决这个问题。

对于大量数据 ,Session 是一个不错的选择。如果您能够检测到任何用户何时完成了特定的数据块,请将 Session 变量设置为 null,以抵消内存开销。你不能总是这样做,但 session 也会过期,内存会自动回收。降低 session 超时也有帮助,但请根据需求进行设置。

此外, session 中的数据实际上存在于页面加载之间的 Web 服务器上。这有助于保持较小的页面大小,它只需要使用 session ID。

最后一个选项是使用缓存。检查 MSDN here for the best practices on Caching.

关于c# - 将 DataTable 分配给 ViewState 是一个好方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18821957/

10-12 22:19