DataGridView数据源:慢速分配

时间:2014-02-04 21:36:22

标签: c# datagridview backgroundworker

我已经继承了一个表格,并负责加快速度。基本上,它是一种对某些数据进行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的任何部分?这项任务冻结了用户界限太久了。

2 个答案:

答案 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服务返回)。