我已经继承了一个表格,并负责加快速度。基本上,它是一种对某些数据进行WCF
服务调用的表单,然后在DataGridView
中显示数据。
我原本以为瓶颈是WCF
来电,所以我把它移到BackgroundWorker
,以阻止用户界面冻结。
这有点帮助,但事实证明瓶颈实际上是这一行:
DumpInfoGrid.DataSource = dumpGridBinding;
将从WCF
检索到的数据分配给DataSource
属性。
代码基本归结为:
private BackgroundWorker dataGatherer;
dataGatherer.DoWork += dataGatherer_DoWork;
dataGatherer.RunWorkerCompleted += dataGatherer_RunWorkerCompleted;
private void dataGatherer_DoWork(object sender, DoWorkEventArgs e)
{
dumpGridBinding = WCF.GetDataFromService();
}
private void dataGatherer_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DumpInfoGrid.DataSource = dumpGridBinding;
}
我有什么办法可以加快速度吗?或者我可以移动到BackgroundWorker
的任何部分?这项任务冻结了用户界限太久了。
答案 0 :(得分:2)
一种可能的解决方案是使用ObjectListView中的FastDataGridView(或FastDataListView),它可以通过不尝试一次处理所有记录来大大提高DataGridView控件的速度。
另一个解决方案是分页你当前拥有的DataGridView,在你使用它们时分散页面的加载时间as seen here
答案 1 :(得分:0)
你可以使用虚拟模式 - MSDN:http://msdn.microsoft.com/en-us/library/15a31akc.aspx 此模式仅显示用户通过可查看区域查看的行 - 您只加载实际正在查看的行 - 这很快。
您处理CellValueNeeded事件,并在用户滚动列表时提供列表中的数据。 Tex示例向您展示了如何执行此操作,但是可以轻松编写要跳过的linq语句,从数据源中获取请求(从WCF服务返回)。