DataGridView 重绘速度慢

Posted

技术标签:

【中文标题】DataGridView 重绘速度慢【英文标题】:DataGridView slow at redrawing 【发布时间】:2011-11-11 23:35:53 【问题描述】:

我昨天发帖是因为我怀疑我编写的 LINQ-to-SQL 查询速度非常慢。我正在做的是迭代我的查询结果,并从中构造一个 DataTable。然后我将 DataTable 绑定到表单上的 DataGridView。

我认为查询是缓慢的部分,但我反驳了这一点 - 查询以及 DataTable 构造最多需要一两秒钟,但是当我在 DataGridView 上设置 DataSource 属性时,应用程序似乎在显示网格之前挂起大约 10 秒。

我尝试过使用反射在 DGV 上设置 DoubleBuffered 属性,但遗憾的是没有什么不同。有没有其他人遇到过这样的问题?

编辑:请注意,如果网格有少量的行(即 30-40),它会起作用。一旦行数达到数百,它就会停止

【问题讨论】:

在这个 MSDN 条目(Windows 窗体 DataGridView 控件中的性能调优)中可能有一些有用的东西:msdn.microsoft.com/en-us/library/ms171621.aspx 我曾经在后台使用 linq-to-sql 的 DataGridView 非常慢,因为在数据绑定期间触发了延迟加载的引用。如果您确定没有发生类似的事情,那么我建议您手动生成相同大小的数据表并查看您是否仍然遇到问题 - 如果问题仍然存在,那么您可能需要实现虚拟模式。 @David Hall :很可能是延迟加载,可以通过 datacontext 上的 dataloadoptions 解决。另请参阅我的答案 【参考方案1】:

跟踪生成的 SQL。很可能确实是延迟加载,导致每行有一个或多个额外的 sql 语句(这与您描述的行为一致)。

您可以从数据上下文记录 SQL,也可以使用 sql server profiler 查看正在生成的 sql。

如果确实是延迟加载,您可以使用 datacontext 的 DataLoadOptions 来覆盖默认的延迟加载行为。 示例(这将加载每个客户的所有订单)

DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Customer>(Customer => Customer.Orders);
db.LoadOptions = options;

所以在这种情况下,您会看到 Linq2sql 正在生成一个连接

v更多信息:http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx

【讨论】:

以上是关于DataGridView 重绘速度慢的主要内容,如果未能解决你的问题,请参考以下文章

C#重绘DataGridView行

JQGrid重绘很慢

怎么让datagridview不自动修改绑定的datatable

将 DataTable 绑定到已定义列的 Datagridview

如何允许用户在 c# 中的 datagridview 组合框中手动输入

在 DataGridView 中,根据输入的值更改选定的单元格