2

我不确定这在 ASP.NET 中是否可行,但这是我遇到的问题:我的 Web 应用程序上的一些数据列表是使用GridView显示的;但是,由于其中一些列表可能包含大量数据,因此有时会由于ViewState将页面权重推高到几兆字节的范围内。由于我们不想每次在页面上有回发时都重新查询数据库以获取此信息,所以我想知道是否有一种方法可以缓存提供给服务器上控件的数据,然后下次访问它有回发。

那么这甚至可能吗?如果是这样,有人可以向我指出有关如何执行此操作的更多信息的方向吗?如果不可能,是否有人对我如何解决这个问题有任何建议?

4

4 回答 4

3

除了页面之外,您还可以为视图状态使用不同的商店。 本文描述了一些方法来做到这一点。

这样做的要点是覆盖 SavePageStateToPersistenceMedium 和 LoadPageStateFromPersistenceMedium。

于 2009-02-24T20:39:44.490 回答
2

您可以尝试关闭 GridView 上的 ViewState。这可以经常在不影响功能的情况下完成。如果您的 GridView 仅显示数据并且不允许编辑、更新、删除等,则效果很好。

http://www.pluralsight.com/main/screencasts/screencast.aspx?id=understanding-viewstate

EnableViewState="false"

通常,您必须在客户端上的 ViewState 和服务器上的某种类型的缓存之间建立平衡。不要害怕重新查询数据库。它可以很好地缓存数据。可能会考虑启用页面缓存。我会避免将所有这些数据塞进 Session 中,这会带来一系列问题。

http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx

<%@ Page Language="C#" AutoEventWireup="true" ... %>
<%@ OutputCache ... %>
于 2009-02-24T20:43:13.733 回答
0

以下是如何将 Viewstate 存储在本地临时文件中的示例: http ://www.marklio.com/marklio/PermaLink.aspx?guid=af76f1a0-2d44-44c3-bfb5-029740b8e683

您仍然通过这种方法使用 Viewstate,但不是填充 HTML,而是在服务器端创建临时文件。因此用户不会注意到 Viewstate 是巨大的。您还可以重写上面的示例以将 Viewstate 数据存储在其他地方,例如数据库甚至内存中。

这种方法的优点是您不必重写太多代码。缺点是这些临时文件将填满服务器上的空间,需要不时清理一次。

于 2009-02-24T20:54:27.153 回答
0

Rob,在您的情况下,我会尝试在会话中缓存从数据库中检索到的数据 - 网格第一次请求它。

如果您尝试此操作并将其与禁用网格的视图状态相结合,您可以提出非常巧妙的解决方案。

If you cannot count on Session for the caching, there are always some alternative persistence mechanisms that might do the job.

But from the design aspect of the given situation, i would definitely go with the data caching approach.

于 2009-02-24T21:39:18.543 回答