考虑我的数据表包含 10,000 行,我想知道将数据表存储在会话变量中的陷阱......我想使用它,直到添加了新行......
我应该使用什么类型的会话模式?
考虑我的数据表包含 10,000 行,我想知道将数据表存储在会话变量中的陷阱......我想使用它,直到添加了新行......
我应该使用什么类型的会话模式?
有了这么大的数据集,我真的不认为你应该将它存储在会话或视图状态中。以 SQL 状态存储也会产生巨大的读写开销。存储在内存会话中会显着影响您的工作进程内存使用情况。存储在 ViewState 中更糟糕,因为由于页面大小以及对视图状态进行编码和解码所花费的时间,它会使页面加载非常缓慢。
如果你真的必须这样做,我会在记忆会议中选择所有选择并付出代价。否则,我认为您应该考虑重构代码,而不必缓存该大小的数据表并根据需要在集合/页面中提取数据。或者,如果您有分层架构,让您的应用程序代码缓存它,并且当发出请求时,应用程序代码可以在需要时提取记录/子集并将其返回给 UI。
永远不要这样做,不建议这样做。如果您的服务器内存不足且处理时间繁忙,则会影响性能。
在进行此操作之前,您需要考虑
为什么要将这么多数据存储到会话中。可能您这样做是为了分页(在我假设的数据网格中),那么您必须重新考虑您的设计。
如果您需要整个用户会话中的数据,那么将其存储在 Session 中是很好的。但在您的情况下,您可以选择 ViewState 或 Cache。你可以存储在 ViewState 中更好。
ViewState["Table"] = ds.Tables[0];
取回它,
数据集 ds=新数据集();ds = (DataSet)ViewState["Table"];
但是请记住将 DataSet 放在 ViewState 中的一件事会增加页面加载。
**
执行您要求的最有效方法是将数据库返回的数据集转换为通用列表,然后使用会话来保存列表。List 将比会话中的 Dataset 花费更少的内存。
**
首先,您真的需要在会话级别存储那么多数据吗?您能否在应用程序级别(缓存对象)存储更多内容。
如果您有一个场,即不止一个 iis 服务器,那么您将不得不使用内存缓存或 sql 缓存。使用大 blob,内存缓存会更快。如果它在该服务器内存中的单台计算机上可以工作。
我会认真考虑重构问题。能否引入分页或其他形式的数据窗口以减少数据量?