我基于 SessionPageStatePersister
编写了自己的 PageStatePersister
类,该类将 session 的最近 10 个 Viewstate
写入共享磁盘。我认为这比将 Viewstate
保持在 session 中更好,因为所有网络服务器都可以访问它,它们不必处理过期问题,并且使用更少的内存。
当用户关闭浏览器时,它会通知服务器,服务器会删除那些两小时内未访问的文件。到目前为止一切顺利,但我想知道将 Viewstate
存储在 SQL Server 数据库中是否会更快、更高效。
- 每个
ViewState
文件平均为 30k。 - 目前,它只是读取隐藏字段来获取 Viewstate 键并直接访问文件并反序列化。无需排序或搜索。
- 每小时大约有 2000 个并发用户,并且每小时保存最近 20 个 Viewstate session 将大约有 20k 临时 View 文件。
- 它必须定期遍历文件并删除最旧的文件。
那么在这种情况下哪个更好:平面文件系统还是数据库?
最佳答案
将 ViewState 存储在 SQL Server 中会更好地扩展。例如,如果您最终希望从最近 10 个增加到最近 50 个,则数据库负载的增加相对较小。通常应尽可能避免磁盘 I/O,而不是 DB I/O。清理操作也会工作得更好,因为在磁盘上废弃文件的荒地中寻找可能比 WHERE DateInserted > 20 分钟前
繁重得多。
关于asp.net - 平面文件中的 View 状态与 SQLserver 中的 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549403/