0

我指的是这篇关于在文件系统上保存 ViewState 的文章

这很好但并不理想,因为它没有存储关于viewstate它是哪个页面的任何内容。viewstate页面与其文件之间似乎没有进行任何映射。我希望能够使用Asp.Netwebforms 丰富的编程模型,同时摆脱 ViewState。我可以将它存储在 Session 中,但它太贵了。我宁愿将它存储在文件系统上。

我能想到的一种方法是Guid在隐藏字段中存储页面并将实际的 ViewState 存储在文件名 Guid 中。这会起作用,但是我如何清理将清除这些 ViewState 文件的目录?为这样简单的任务创建自动化服务并定期删除这些文件将是一件痛苦的事情。

有什么想法/建议吗?

4

6 回答 6

1

看看 MongoDB。

http://www.mongodb.org/

这篇文章在 MongoDB 中保留 ViewState,这是一个以文档为中心的数据库。这将比 Sql Server 快得多,并且比将其存储在平面文件中要好得多。

一篇文章正好说明了这一点:

http://highoncoding.com/Articles/699_Storing_ViewState_in_MongoDb_Database.aspx

但是,您最初对删除旧文件的担忧仍然存在。您可以编写代码来清理Session_End事件中的旧 ViewState 文档

或者

如果您使用OutProcSqlServer会话模式来存储会话,您可能必须不断检查旧文件LoadPageStateFromPersistedMedium并在那里删除旧文件,因为 Session_End 不会针对这些模式触发,但我怀疑您是否会使用 Sql Server,因为您非常担心关于它 :)

于 2012-05-17T17:13:27.960 回答
0

One thing many people overlook on ViewState is that it is defaulted to enabled on all controls, and in many cases it is not needed. If I was concerned about ViewState size, the first thing I would do would be to disable ViewState whereever it is not needed.

The solution discussed in the CP article, does not mention that ViewState must be used for controls where the user can directly change the value, such as a textbox. Unless you use some JavaScript or jQuery workaround and a bunch of query strings, ViewState is the way to get back the values a user has entered on the form.

So, the only place where the solution you are considering would be of value would be a place where you have an asp:Label or asp:Literal and are changing that value in server-side code in response to a button click or some other event, and need to make sure that the change is persisted over subsequent post backs.

于 2012-05-17T16:56:26.693 回答
0

看看 Windows Server AppFabric。通过配置设置很容易实现......

http://msdn.microsoft.com/en-us/windowsserver/ee695849

http://en.wikipedia.org/wiki/AppFabric

于 2012-05-17T16:50:58.353 回答
0

根据您的问题,如果您不希望视图状态的 HTML 重载,您可以为所有控件禁用它。你真的需要记住文本框中的值吗?

如果您想维护视图状态但不在 HTML 中,我会推荐会话,默认情况下它使用服务器内存,速度很快。您甚至可以在 SQL 或 Windows 服务中使用 Session,速度较慢的选项。

如果愿意,您也可以使用 cookie,这是另一种选择,并且保留在客户端上。

我不建议使用文件,读取速度很慢,并且只有一个用户可以访问这些文件,因此您必须生成和维护大量文件。

但根据我的经验,我会禁用视图状态,或者保持不变。

希望能帮助到你。

于 2012-05-17T17:17:24.550 回答
0

您可以使用 SQL 服务器来存储会话状态。这比“滚动你自己的”解决方案要好得多。

http://support.microsoft.com/kb/317604

于 2012-05-17T16:35:13.977 回答
0

保存 ViewState 的代码可以迭代您保存 ViewStates 的任何目录中的文件,并删除您认为过期的任何文件。从技术上讲,这允许非常旧的 ViewState 挂起——但前提是没有保存新的 ViewState,这样它们就不会溢出你的文件系统。

或者,它可以在后台启动一个线程来执行此操作。存储在应用程序上下文中的标志可用于避免多次启动。我不太喜欢这个解决方案,因为它更复杂。

于 2016-02-14T16:56:28.313 回答