在我的应用中,Datagridview显示对象代理
代理有两个属性Address,Status
DataGridview绑定到包含Proxy对象的List。
由于内存负载过重,DataGridView和UI变为无响应,因为列表的代理数量达到了100万。
该应用程序从不同的网站收集代理,如何扩展应用程序以处理大量列表。
我担心的是,正在收割并同时实施分页。
使用SQLCe进行分页,这是一个很好的解决方案吗?或者sql会减慢收获过程,或者是否有更好的解决方案,我不知道。
应用程序每秒收集500 - 1700个代理,这是一个功能,提取“尽可能快”,我现在有其他明显的限制,瓶颈,但我忽略了他们现在。
请建议我如何保持速度,并使其扩展,最佳做法。 ,我不确定SQLCe
答案 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等相比仍然相当糟糕。