2009-10-10 115 views
2

我写了我自己的PageStatePersister类基于SessionPageStatePersister它写最近10 Viewstate s会话到共享磁盘。我认为这会比在会话中保留Viewstate更好,因为所有的Web服务器都可以访问它,它们不必处理过期并使用更少的内存。查看状态在平面文件vs查看状态在SQLserver

当用户关闭浏览器时,它会通知服务器,服务器会删除那些在两个小时内未被访问的文件。到目前为止这么好,但我想知道是否将Viewstate存储在SQL服务器数据库中会更快更高效。

  1. 每个ViewState文件平均为30k。
  2. 目前它只是读取隐藏字段以获取Viewstate键并直接访问文件并反序列化。无需分类或搜索。
  3. 每小时将有大约2000个并发用户并保存最近的20个Viewstate会话将每小时大约20k个临时视图文件。
  4. 它必须定期遍历文件并删除最旧的文件。

因此,这是在这种情况下,更好的:一个平面文件系统或数据库

+0

您提到“我认为这样会比保持会话中的视图状态更好,因为所有的Web服务器都可以访问它”。视图状态是什么意思保存在会话中?这是你明确想要的吗?要将视图状态数据存储在服务器中而不是客户端的浏览器上? – 2009-10-11 05:53:08

+2

yep viewstate应该在服务器上。 – Tuviah 2009-10-11 14:56:23

回答

3

在SQL Server中存储ViewState会更好。例如,如果您最终希望从最近的10个增加到最近的50个,那么数据库负载将会相对微不足道的增加。通常应尽可能避免磁盘I/O,而不是DB I/O。清理操作也会更好,因为在磁盘上寻找废弃文件的荒地可能比WHERE DateInserted > 20 minutes ago重得多。