gpt4 book ai didi

c# - DataGridView、虚拟模式和 "lags"

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:37 26 4
gpt4 key购买 nike

我的代码如下所示:

private void dataGridView4_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
Records recordsTmp = null;
recordsTmp = (Records)this.ArrayOfRecords[e.RowIndex]; //ArrayList with string[] objects inside


switch (dataGridView4.Columns[e.ColumnIndex].HeaderText)
{
case "#":
e.Value = recordsTmp.nr;
break;
case "ip":
e.Value = recordsTmp.Ip;
break;
case "long":
e.Value = recordsTmp.Long;
break;
case "3":
e.Value = recordsTmp.type;
break;
case "4":
e.Value = recordsTmp.time;
break;
}
  • ArrayOfRecords 每秒更新 10-100 个新的 string[] 对象。
  • VirtualMode 设置为 true。
  • SelectionMode 设置为 FullRowSelect
  • dataGridView 是只读的。

现在还有一个 ProgressBarMarquee 样式,它向我展示了假设 5000 多行滚动卡住了 Form 但我猜它只是线程/后台 worker 等的问题。

最让我害怕的是选择。拥有 8000 行 并单击最后一行 (8000) 需要我的表格 4.2 秒才能选择它。其如下:

4000 行需要 2.1 秒,依此类推。如果选择第 8000 行,则最小化然后最大化需要 4.2 秒。选择第 1 行“让它”再次快乐。这是 Not Acceptable 。 *为什么为我的 Form“标记”第 8000 行如此困难?

VirtualMode 的分页效果很好,但选择很痛苦。

还有另一个问题/行为:

为什么当我将鼠标移到行上时会引发 CellValueNeeded 事件?他们已经画好了?那么为什么会浪费资源呢?

这个选择问题有解决办法吗?或者我必须限制数据网格中的最大记录数

最佳答案

您想要玩的一件事是单元格的自动调整大小,因为 GridView 必须遍历所有单元格才能找到长度最长的单元格。您应该禁用自动调整大小并且您应该以编程方式执行此操作。关于您的选择问题:选择会导致大量重绘,我的直觉是重绘所有单元格,因此延迟与您的行/单元格数成正比。

为了使用虚拟模式,您需要的不仅仅是将 VirtualMode 设置为 true。看到您的 dataGridView1_RowsAdded、dataGridView1_CellValuePushed 和 dataGridView1_CellValidating 方法会很有趣,因为它们可能是延迟的罪魁祸首。

关于c# - DataGridView、虚拟模式和 "lags",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com