Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView数据源:分配缓慢_C#_Datagridview_Backgroundworker - Fatal编程技术网

C# DataGridView数据源:分配缓慢

C# DataGridView数据源:分配缓慢,c#,datagridview,backgroundworker,C#,Datagridview,Backgroundworker,我继承了一个表单,并被指派加快它的速度。基本上,它是一种表单,它为某些数据对服务进行WCF调用,然后在DataGridView中显示数据 我最初认为瓶颈是WCF调用,因此我将其移动到BackgroundWorker,以防止UI冻结 这有点帮助,但事实证明,瓶颈实际上是这条线: DumpInfoGrid.DataSource = dumpGridBinding; 其中,从WCF检索的数据被分配给数据源属性 代码基本上归结为: private BackgroundWorker dataGathe

我继承了一个表单,并被指派加快它的速度。基本上,它是一种表单,它为某些数据对服务进行
WCF
调用,然后在
DataGridView
中显示数据

我最初认为瓶颈是
WCF
调用,因此我将其移动到
BackgroundWorker
,以防止UI冻结

这有点帮助,但事实证明,瓶颈实际上是这条线:

DumpInfoGrid.DataSource = dumpGridBinding;
其中,从
WCF
检索的数据被分配给
数据源
属性


代码基本上归结为:

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
的任何零件?分配冻结UI的时间太长。

一种可能的解决方案是使用中的FastDataGridView(或FastDataListView),这通过不尝试一次处理所有记录大大提高了DataGridView控件的速度


另一个解决方案是对当前拥有的DataGridView进行分页,在使用页面时将加载时间分散到各个页面上

您可以使用虚拟模式- MSDN: 此模式仅显示用户通过可视区域查看的行-您只加载实际查看的行-这很快


处理CellValueRequired事件,并在用户滚动列表时从列表中提供数据。Tex示例向您展示了如何做到这一点,但编写一个linq语句可以轻松跳过,从数据源(从WCF服务返回)获取任何请求。

只是想知道这个数据有多大?@Abhinav一天的数据大约有30kb。那么30kb*X,其中X是用户希望加载的天数。关于您的第一段,您是说DataGridView试图一次处理所有记录吗?或者FastDataGridView就是这么做的?轻微的打字错误,在原来的帖子中修复了。如果未启用虚拟模式,DataGridView将执行此操作,如下所述。