【问题标题】:Performance when setting a large DataSource of a DataGridView设置 DataGridView 的大型 DataSource 时的性能
【发布时间】:2011-12-18 15:08:18
【问题描述】:

我有一个相当大的数据集(1000 行),我想将它输入到我的 Windows 窗体应用程序 (.NET 3.5) 中的 DataGridView 中。从数据库中查询数据并构建 DataTable 非常快,但是当我设置 DataGridView 的 DataSource 属性时,应用程序需要大约一分钟才能响应。

我尝试使用反射魔法将 DoubleBuffered 设置为 true,但这似乎没有效果。有什么建议吗?

澄清一下,性能糟糕的代码就是这样的:

dgv1.DataSource = dt;

其中 'dt' 是我建立的数据表

【问题讨论】:

  • 表格有多少列?您是否使用任何大型(或二进制)数据类型?您可能还需要考虑分页 - 并且只绑定必要的最少行。
  • 1000 行并不极端。你有任何 AutoColumnWidth 设置吗?

标签: c# winforms datagridview


【解决方案1】:

我不知道这会如何影响您的申请。

但是根据启动 DataGridView 填充的事件,我会使用 BackgroundWorker,它在后台运行起来会很有趣,从而释放应用程序,使其看起来不会无响应。后台工作人员也可以向调用它的主线程报告,使您能够实现一些更新/进度条的软性。

根据自己的经验,从数据源获取数据并进行绑定总是需要一些时间。

protected BackgroundWorker _bw;
_bw = new BackgroundWorker;
_bw.DoWork += DoWorkMethod;

public void DoWorkMethod(object sender, DoWorkEventArgs e)
{
//Do work here.
}

这就是它的要点。您可以使用 Completed 和 UpdateProgress 方法来帮助显示进度条等...

【讨论】:

  • 该问题包含足够的信息来确定这将不是解决方案。分配给 DataSource 必须在主线程上完成。
猜你喜欢
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2013-03-28
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多