2011-07-20 36 views
3

我有我的页面上可以显示10,000或更多行的列表视图。ASP.Net列表视图列表视图回传缓慢,有很多数据在列表视图

在页面的顶部有一个简单的'客户'下拉菜单,用于执行自动回发来更改数据过滤器。我一直在试图优化这个例程,并且我注意到大部分时间都是将ViewState从客户端传输到服务器。

我已将EnableViewState =“false”添加到ListView控件,但它不会更改它。我已经在Fiddler中查看了这个请求,如果屏幕上的客户说了50行,请求内容的长度就会很低 - 如果它们有10,000个或者其他东西很大。

任何人都有修复?

+0

您的查询可能是瓶颈。 – Alban

+0

查询不是瓶颈...... postdata包含视图状态,这是瓶颈提琴手验证的瓶颈。 – Shibbz

+0

我的不好。我错过了你的问题:“但它不会改变它。”如果你的问题已经由VinayC的建议解决了,你需要通过标记/检查他的答案给他信任。 – Alban

回答

3

这是因为数据绑定控件(包括列表视图)会将其数据源存储到视图状态。所以视图状态会很大,导致页面大小膨胀。

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

更好的解决方案是做数据存储方分页,即如果你只显示50行,那么只能从数据库中提取50行。这通常被称为ASP.NET中的自定义分页,您可以在数据访问技术中找到几个自定义分页的示例。例如,

自定义分页uing实体框架& ObjectDataSource控件:http://geekswithblogs.net/Frez/articles/using-the-entity-framework-and-the-objectdatasource-custom-paging.aspx

您可以使用SQL Server排名函数做分页存储过程:http://msdn.microsoft.com/en-us/library/bb445504.aspx

+0

如何禁用listview的视图状态?我不希望分页,因为用户按Ctrl + F可以快速找到特定的记录。如果你从一个小列表开始,15,000条记录需要3秒才能完全加载,如果你从一个大列表开始,需要30秒。 – Shibbz

+0

@ user771841,其控制级属性(最好在设计模式下设置)。在.NET 4中,在ListView标签中使用'ViewStateMode =“Disabled”'。对于以前的版本,您需要使用'EnableViewState =“false”。在以前的版本中,您可能不得不摆脱页面级视图状态。 – VinayC

+0

对我来说,在ListView上设置ViewStateMode禁用只会将ViewState减少20%(与将EnableViewState设置为false相同),其中不会渲染ListView将ViewState减少近100%。你知道这是为什么吗?我已经尝试禁用ValidateRequest&EventValidation,因为我已阅读ViewState用于支持这些功能无效。 – Michael