背景颜色更改时DataGridView性能低下

本文关键字:性能 DataGridView 颜色 背景 | 更新日期: 2023-09-27 17:58:01

我正试图根据DateTime.Now值的剩余天数或经过天数设置DataGridViewRow背景色。我已经编写了一个简单的静态类,它解析dayleft/传递给color并返回此颜色(RowColors.GetRowColor(DataGridViewRow行)。这个函数我用来遍历DataGridView中的所有行,并更改返回静态类的背景颜色。

一切都很好,但有一个小问题——性能。我有大约1000行,着色持续大约4秒。我知道,没那么多,但我希望它光滑漂亮。

此外,当我添加一行时,由于事件触发,我必须等待4秒。我使用了平行循环,但它似乎是绘图问题。我怎样才能做得更快。谢谢

 private void allMatchesDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            Color rowColor=Color.LightYellow;
             Parallel.For(0, allMatchesDataGridView.RowCount, i =>
            {
                rowColor =
                    RowColors.GetRowColor(
                       Convert.ToDateTime(allMatchesDataGridView.Rows[i].Cells[CellNameTranslator.TranslateFromDatabaseName("DateTime")].Value));
                allMatchesDataGridView.Rows[i].DefaultCellStyle.BackColor = rowColor;
            });
        }

背景颜色更改时DataGridView性能低下

由于您正在更改一个UI元素,因此并行操作将没有帮助。

相反,您应该优化您的着色代码。

第一:DGV处于实时模式时不要更新!

  • 更新前调用SuspendLayout();,更新后调用ResumeLayout()

第二:

  • 试着只改变需要改变的东西。这将需要一些记账,但就性能而言,这将是便宜的

此外,您可能会考虑签出WPF,这对于任何GUI工作来说都会快得多。