Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 除了视图状态,还有其他方法存储数据源吗?_Asp.net_Datatable_Viewstate - Fatal编程技术网

Asp.net 除了视图状态,还有其他方法存储数据源吗?

Asp.net 除了视图状态,还有其他方法存储数据源吗?,asp.net,datatable,viewstate,Asp.net,Datatable,Viewstate,我有一个页面,如果数据不在数据库表中,则在该页面上以编程方式创建数据表。在回发期间,我必须在许多事件中使用此数据表。数据表可能包含数百条记录,并且可能有多个用户访问同一页面(当然每个用户使用不同的数据源)。我正在视图状态下存储数据表,但我担心这种做法会使页面更重。是否有其他方法可以跨回发保留数据表。代码很长,因此我无法在这里复制并通过它 使用session将再次使整个应用程序变得更重…那么它比viewstate更好吗 可能需要将数据存储在缓存对象中如果每个用户的数据表不同,则应使用会话,或者可以

我有一个页面,如果数据不在数据库表中,则在该页面上以编程方式创建数据表。在回发期间,我必须在许多事件中使用此数据表。数据表可能包含数百条记录,并且可能有多个用户访问同一页面(当然每个用户使用不同的数据源)。我正在视图状态下存储数据表,但我担心这种做法会使页面更重。是否有其他方法可以跨回发保留数据表。代码很长,因此我无法在这里复制并通过它


使用session将再次使整个应用程序变得更重…那么它比viewstate更好吗

可能需要将数据存储在缓存对象中

如果每个用户的数据表不同,则应使用
会话
,或者可以使用
缓存
,假定为每个用户创建不同的缓存对象


但是,如果数据表非常大,那么将其存储在内存中而不是直接访问数据库可能不是一个好主意。

您应该使用
会话。也可以使用
应用程序
缓存
,但您必须在页面上生成并存储一个唯一的键,以消除来自不同用户的请求之间可能存在的干扰。

在您的情况下,视图状态可能会变得非常大,并会影响页面加载性能。我想最好的办法是改变你处理事后事件的方式

  • 如果多个用户需要相同的数据,请使用缓存
  • 如果数据特定于每个zuser,则使用会话。但请记住,如果你处于 在集群环境中,它有一些陷阱
  • 每次用户发回服务器时,从数据库加载数据。不需要在服务器上进行状态处理,但在进行网络往返时会降低性能

为了快速修复,我通常将视图状态存储在服务器上。请参阅本页以了解相关信息

如果数据是特定于用户的,则可以使用会话。但是,在进程外会话状态下,您可能会遇到问题,因为所有这些数据都需要从会话存储区来回封送

否则,缓存是一个不错的选择,但您需要在典型的使用场景中选择缓存周期和过期策略(还需要优雅地处理缓存过期场景)


另一种选择是将数据推送到临时文件中,但是,在这种情况下,您需要管理文件清理等。

会话对象按用户定义。但在这个问题上,我认为在不同的会话中使用相同的数据。这个问题指出:“(当然,每个用户的数据源不同)”