ASP.Net ListView回发速度慢,ListView中有大量数据

ASP.Net ListView回发速度慢,ListView中有大量数据,asp.net,listview,request,postback,viewstate,Asp.net,Listview,Request,Postback,Viewstate,我的页面上有一个列表视图,可以显示10000行或更多行 页面顶部有一个简单的“customer”下拉列表,可以自动回发以更改数据过滤器。我一直在尝试优化这个例程,我注意到大部分时间都花在将ViewState从客户端传输到服务器上 我已经将EnableViewState=“false”添加到ListView控件中,但它没有改变它。我已经在Fiddler中查看了请求,如果屏幕上的客户说有50行,那么请求内容长度就很低——如果他们有10000行或其他一些内容,那么请求内容长度就很大 任何人都有解决方案

我的页面上有一个列表视图,可以显示10000行或更多行

页面顶部有一个简单的“customer”下拉列表,可以自动回发以更改数据过滤器。我一直在尝试优化这个例程,我注意到大部分时间都花在将ViewState从客户端传输到服务器上

我已经将EnableViewState=“false”添加到ListView控件中,但它没有改变它。我已经在Fiddler中查看了请求,如果屏幕上的客户说有50行,那么请求内容长度就很低——如果他们有10000行或其他一些内容,那么请求内容长度就很大


任何人都有解决方案吗?

发生这种情况是因为数据绑定控件(包括列表视图)将其数据源存储到视图状态。因此,视图状态将变大,从而导致页面大小膨胀

解决方案之一是禁用列表视图的视图状态,并在每次页面发回时将其绑定

更好的解决方案是执行数据存储端分页,即如果只显示50行,则只从数据库中获取50行。在ASP.NET中,这通常称为自定义分页,您可以找到几个用于数据访问技术的自定义分页示例。比如说,

自定义分页uing实体框架和ObjectDataSource:


您可以使用SQL Server排名函数在存储过程中进行分页:

您的查询可能是瓶颈。查询不是瓶颈。。。postdata包含viewstate,这是fiddler验证的瓶颈。我的坏消息。我在你的问题中漏掉了这一点:“但这并不能改变它。”如果你的问题已经通过VinayC的建议得到解决,你需要通过标记/检查他的答案为已接受来给他评分。看来控制级别属性并不能解决问题。如果我为整个页面禁用ViewState,那么它确实会禁用整个页面,但这并不是真正的目标。ListView似乎没有响应EnableViewState属性。如何禁用ListView的视图状态?我不想分页,因为用户可以按ctrl+f快速查找特定记录。如果从小列表开始,15000条记录需要约3秒才能完全加载;如果从大列表开始,则需要30秒。@user771841,它的控制级别属性(最好在设计模式下设置)。在.NET 4中,在ListView标记中使用
ViewStateMode=“Disabled”
。对于以前的版本,您需要使用`EnableViewState=“false”。在以前的版本中,您可能需要处理页面级别的视图状态。对于我来说,在ListView上设置ViewStateMode disabled只会将ViewState减少20%(与将EnableViewState设置为false相同),而不呈现ListView会将ViewState减少近100%。你知道为什么吗?我已经尝试禁用ValidateRequest&EventValidation,因为我已经读到ViewState用于支持这些功能,但没有任何效果。@Michael,并不是每个状态都进入视图状态包,一些必要的状态存储在控件状态包中,无法禁用。视图状态和控件状态都存储在同一个隐藏变量中。我的猜测是,
DataKeyNames
DataKeys
可能会存储在控制状态,因此从该角度进行调查。