Asp.net 以编程方式与对象数据源绑定以提高性能

Asp.net 以编程方式与对象数据源绑定以提高性能,asp.net,performance,data-binding,database-performance,Asp.net,Performance,Data Binding,Database Performance,我使用ObjectDataSource在我的页面上绑定所有gridview,detailview等(除非无法这样做)。最近,我开始以编程方式绑定所有控件。我发现这更干净、更容易,尽管有些人可能不同意 与ObjectDataSource绑定显然有其优点和缺点,以编程方式进行绑定也是如此 假设我以编程方式绑定GridView(例如,GridView1.DataSource=SomeList),当我更改GridView上的页面时,我还必须对其进行编码。每次页面更改时,我都必须再次调用GridView1

我使用
ObjectDataSource
在我的页面上绑定所有
gridview
detailview
等(除非无法这样做)。最近,我开始以编程方式绑定所有控件。我发现这更干净、更容易,尽管有些人可能不同意

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

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

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

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

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

每个用户缓存是个好主意吗

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

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

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

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