2

我在我的页面上使用了bind allGridViews等(除非不可能这样做)。最近,我开始以编程方式绑定我的所有控件。我发现这更清洁、更容易,尽管有些人可能不同意。DetailViewsObjectDataSource

与 a 绑定ObjectDataSource显然有其优点和缺点,以编程方式进行绑定也是如此。

假设我以编程方式绑定 GridView(例如GridView1.DataSource = SomeList),当我在 GridView 上更改页面时,我还必须对此进行编码。每次页面更改时,我都必须GridView1.DataSource = SomeList再次调用。显然,ObjectDataSource我不需要这样做。我通常将我的SomeList对象粘贴到 ViewState 中,因此当我更改页面时,我不需要每次都访问数据库。

我的问题是:ObjectDataSource 是这样工作的吗?它是否将其数据存储在 ViewState 中并且除非您调用该.Select方法,否则不会再次访问数据库?我喜欢尝试从我的应用程序中获得最佳性能,并尽可能少地访问数据库,但我不太喜欢在 ViewState 中存储大量列表的想法。有没有更好的方法来做到这一点?每个用户缓存是一个好主意(或可能)吗?我是否应该每次都访问数据库而不是将庞大的列表存储在 ViewState 中?有时访问数据库比使用 ViewState 更好吗?

4

1 回答 1

1

它是否将其数据存储在 ViewState 中并且不会再次访问数据库,除非您调用 .Select 方法?

不,它不会将数据保存在 ViewState 中。在视图状态gridview 和其他类似列表中,保存General Status,例如排序列、页面、总页数、控件状态,但不保存Data。

每个用户缓存是个好主意

服务器端每个用户的缓存不是一个好主意,除非缓存仅持续几分钟或/并且您要缓存的数据非常小。如果您长时间为每个用户缓存大量数据,它们会增长太多,特别是如果用户开始阅读大量页面,那么最终您会遇到同样的问题。

现在您必须显示来自许多表的关系的大量数据,那么将表的完整关系缓存到“一个平面表”可能会更好。

我是否应该每次都访问数据库而不是将庞大的列表存储在 ViewState 中?

这也取决于您设计数据读取的速度。对我来说,最好保持 ViewState 很小,并且只保留在页面上执行操作所需的信息,而不是数据。

于 2010-11-16T11:08:22.653 回答