DataGridView使用分页优化性能

时间:2011-08-05 12:29:05

标签: c# .net user-interface datagridview sql-server-ce

在我的应用中,Datagridview显示对象代理

  • 代理有两个属性Address,Status

  • DataGridview绑定到包含Proxy对象的List。

  • 由于内存负载过重,DataGridView和UI变为无响应,因为列表的代理数量达到了100万。

  • 该应用程序从不同的网站收集代理,如何扩展应用程序以处理大量列表。

我担心的是,正在收割并同时实施分页。

使用SQLCe进行分页,这是一个很好的解决方案吗?或者sql会减慢收获过程,或者是否有更好的解决方案,我不知道。

应用程序每秒收集500 - 1700个代理,这是一个功能,提取“尽可能快”,我现在有其他明显的限制,瓶颈,但我忽略了他们现在。

请建议我如何保持速度,并使其扩展,最佳做法。 ,我不确定SQLCe

2 个答案:

答案 0 :(得分:1)

现在为什么希望向用户显示100万条记录?!即使是分页,他仍然需要点击,比方说,10000页!

实施过滤,仅显示必要的内容并将其限制为7条记录。将float Score添加到Proxy;将其表示为百分比 - 0%表示google.com根本没有加载,100%表示与直接连接相比没有减速(哈哈)。

然后就是

var displayedProxies = myProxies.OrderByDescending(Score).Take(7);

考虑潜在的使用场景并使UI适合。例如,如果它针对想要发送数十亿封电子邮件的垃圾邮件发送者,您只需要一个按钮 - “导入(此处为机器可读格式名称)”。但是,如果只是某个用户希望匿名浏览,您可以给他一个“7随机代理”列表,并附上一条消息,分数正在更新。然后用目前为止找到的7个最佳列表实时替换那些随机的7个。

答案 1 :(得分:0)

我同意,最好的方法是以块的形式获取数据,调用接收页码的存储过程以及要返回的记录数,然后将记录绑定到网格。

如果网格中有过滤器,我也会将它们传递给存储过程。

如果你仍然传递许多记录(比如说每页超过一千条),我会在数据网格上禁用VIEWSTATE;事实上,如果你有太多的记录并且你想要这个东西飞行,我宁愿混合使用ajax调用来获取数据,再加上jquery datatables插件,我发现这些插件非常精彩并且记录得很好。 Here's the link.

编辑:如果您使用jquery datatables / webservice方法,请尝试说服人们不要使用IE版本< 9. IE浏览器的Javascript引擎在IE8和7上都很糟糕,但与FF,Chrome等相比仍然相当糟糕。