在会话变量中存储dataTable(10,000行)的缺陷?

时间:2010-02-24 04:59:54

标签: asp.net session session-management

考虑我的dataTable包含10,000行,我想知道在会话变量中存储datatable的缺陷...我想在添加新行之前使用它...

我应该使用什么类型的会话模式?

4 个答案:

答案 0 :(得分:0)

如果您需要整个用户会话中的数据,那么将其存储在Session中就可以了。但在您的情况下,您可以选择ViewState或Cache。你可以在ViewState中存储更好。

ViewState [“Table”] = ds.Tables [0];

检索它,

DataSet ds = new DataSet(); ds =(DataSet)ViewState [“Table”];

  1. 如果在分配会话变量之前读取会话变量或者当前会话超时,则会导致NullReferenceException,因为在从会话变量读取之前没有进行空检查。
  2. 没有简单的方法来跟踪会话变量的使用,它们的键名,它们的数据类型,每个会话使用的大致内存等等。
  3. 但请记住将DataSet放入ViewState中会增加页面加载。

    **

      

    做你最有效的方法   ask是转换数据集   由DB返回到通用列表   然后按顺序使用会话   持有名单。列表将花费更少   记忆然后在会话中的数据集。

    **

答案 1 :(得分:0)

首先,您真的需要存储在会话级别的大量数据吗? 您是否可以在应用程序级别(缓存对象)上存储更多内容。

如果您有一个服务器场,那就是多个iis服务器,那么您将不得不使用它 内存缓存或sql缓存。 使用大blob,内存缓存会更快。 如果它在该服务器上的内存中的单台计算机上工作。

我会认真考虑重构问题。 您可以引入分页或其他形式的数据窗口以减少 数据量?

答案 2 :(得分:0)

数据集很大,我真的不认为你应该将它存储在session或viewstate中。在SQL状态下存储也会产生巨大的读写开销。存储在内存会话中将显着影响您的工作进程内存使用情况。在ViewState中存储更糟糕,因为页面大小和编码和解码视图状态所花费的时间会使页面加载速度极慢。

如果你真的必须这样做,我将在内存会话中选择所有选择并付出代价。否则,我认为您应该考虑重构代码,而不必缓存那个大小的数据表,并根据需要在集合/页面中提取数据。或者,如果您具有分层体系结构,请让应用程序代码对其进行缓存,并在发出请求时,应用程序代码可以在需要时提取并将记录/子集返回到UI。

答案 3 :(得分:0)

永远不要这样做,不推荐使用..如果您的服务器内存不足且处理繁忙,会影响性能。

在继续此操作之前,您需要考虑

  1. 您的服务器是否有可用内存?
  2. 您的服务器有多忙?
  3. 您进入会话的数据是否会在多个用户请求之间共享?
  4. 为什么你要将那么多数据存储到会话中。可能你可能正在为分页做这个(我假设在数据网格中),那么你必须重新考虑你的设计。