C# Winform 网格渲染在 Windows 7 上缓慢

2024-02-28

我注意到 C# winform datagrid 在我的 windows 7 64 位机器上非常慢。对于具有 1000 行 + 足够的列/文本以适合屏幕宽度的标准网格,我看到滚动时出现明显的渲染延迟(即滚动/滚动条移动滞后约 0.5 秒而不是平滑)。当最大化到全屏时网格特别慢,并且随着显示尺寸减小而变得更快。

GUI 的设置非常简单,只需将 DataTable 绑定到 DataGridView 实例即可;我研究了双缓冲等常见罪魁祸首,但没有看到太多改进。该机器是 win 7 64 位、Xeon 四核和 2 x 23 英寸屏幕,nvidiaquadro nvs 420。

任何人都知道为什么会发生这种情况?


尝试禁用网格的所有事件处理程序,然后查看网格的执行情况。如果性能良好,请启用一些,直到性能受到影响。如果即使网格没有事件处理程序并且它仍然执行缓慢,罪魁祸首可能是史蒂夫在他的回答中提到的自动调整大小。

应用程序性能在其他机器上是否会受到影响?是否与需要重新安装视频驱动程序有关?

编辑:我刚刚做了一个测试应用程序并看到了你的问题,但是当我进行双缓冲时它就消失了? 你是如何做到双缓冲的?

看这个答案:如何在窗体上双缓冲 .NET 控件? https://stackoverflow.com/questions/76993/how-to-double-buffer-net-controls-on-a-form

我的完整代码,我做了一个DataSet有 20 列称为DataSet1,然后我制作了一个简单的 Windows 窗体DataGridView:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // comment out the line below for the application to lag
            SetDoubleBuffered(dataGridView1);


            for (int i = 0; i < 10000; i++)
            {
                dataSet1.DataTable1.AddDataTable1Row(GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString(),
                    GetRandomString());
            }
        }

        public static void SetDoubleBuffered(System.Windows.Forms.Control c)
        {
            //Taxes: Remote Desktop Connection and painting
            //http://blogs.msdn.com/oldnewthing/archive/2006/01/03/508694.aspx
            if (System.Windows.Forms.SystemInformation.TerminalServerSession)
                return;

            System.Reflection.PropertyInfo aProp =
                  typeof(System.Windows.Forms.Control).GetProperty(
                        "DoubleBuffered",
                        System.Reflection.BindingFlags.NonPublic |
                        System.Reflection.BindingFlags.Instance);

            aProp.SetValue(c, true, null);
        }


        private Random rand = new Random();

        private string validChars = "0123456789abcdefghijklmnopqurstuvwyz";

        private string GetRandomString()
        {
            StringBuilder builder = new StringBuilder();

            char[] c = new char[rand.Next(15,20)];
            for (int i = 0; i < c.Length; i++)
            {
                c[i] = validChars[rand.Next(0, validChars.Length - 1)];
            }

            return new string(c);
        }
    }
}

使用超过 100,000 条记录进行测试,每条记录有 20 列,长度从 15 到 20 不等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Winform 网格渲染在 Windows 7 上缓慢 的相关文章

随机推荐

  • 在应用程序浏览器中将 Instagram 转义至 Safari

    我的网站中有一个链接 可以重定向到 Instagram 登录以获取一些照片 但该页面无法在 iOS 设备上的 Instagram 应用内浏览器上运行 我的想法是放置一个链接 以便用户可以单击它并重定向到 safari 或默认浏览器中的页面
  • 有没有一种好方法可以让 Map get 和 put 忽略大小写? [复制]

    这个问题在这里已经有答案了 有没有好的方法可以有一个Map
  • 如何使用离线设备捕获地理位置 - cordova

    我正在使用 cordova 开发一个应用程序 并发现需要获取用户的纬度和经度数据 但我的应用程序将离线使用 无需互联网访问 我有两个问题 1 如何检查设备是否启用 GPS 2 如何在没有互联网连接的情况下离线获取纬度和经度 这是可能的 我会
  • 在 React 中设置单选按钮值

    我正在制作一个简单的反应应用程序 其表单具有单选按钮 这里有一个可用的默认数据 例如 const defaultData ContactMode 3 ContactMode 2 ContactMode 2 要求 gt 需要迭代这个defau
  • Tensorflow:“GraphDef 不能大于 2GB。”分配变量后保存模型时出错

    我想用一个预训练的模型来热启动另一个有一点差异的模型 简而言之 我创建一个新模型 并使用预训练的模型权重分配具有相同名称的变量 但是 在保存模型时 出现错误 Traceback most recent call last File tf t
  • Android 应用程序在发布中崩溃,但在调试 NullPointerException 中不会崩溃

    由于从我正在使用的 API 返回的数据发生了更改 我最近更改了 2 行代码作为解决方法 现在 当使用发布的 apk 和 aab 时 应用程序崩溃 但是 当我通过 API 27 上的 Android 模拟器使用该应用程序并将 API 27 设
  • 多线程中 volatile 变量的值不会改变

    我有一个在后台运行的 winform 应用程序BackgroundWorker它有一个无限循环 每小时执行一些事情 我的用户界面Form类是这样的 public partial class frmAutoScript Form privat
  • 未找到 System.Data 程序集

    我有一个参考System Data在我的Windows服务项目中 我不断得到Exception 无法加载文件或程序集 System Data Version 4 0 0 0 Culture neutral PublicKeyToken b7
  • SkipList 与 Dictionary

    我最近一直在阅读有关跳过列表的内容 我有一个 Web 应用程序 它对静态数据集执行相当复杂的 Sql 查询 我想实现一个缓存系统 生成 sql 查询的 md5 哈希值 然后返回查询的缓存数据集 如果集合中存在该数据集 哪种算法更好 字典还是
  • 如何在android中列表视图为空时显示消息

    我是 Android 方面的新手 我正在创建一个应用程序 其中包含将动态填充的列表视图 我的要求是当列表为空时 我想显示一条消息 我不想仅仅为了显示此消息而创建其他视图 有什么好的方法可以做到这一点吗 有什么建议么 ListActivity
  • 语法错误:插入“enum Identifier”,插入“EnumBody”,插入“}”

    我编写了一个枚举类型 当我运行为其创建的 JUnit 测试时 该类型会出现以下语法错误 java lang Error Unresolved compilation problems Syntax error insert enum Ide
  • 需要 python lxml 语法帮助来解析 html

    我是 python 的新手 我需要一些有关使用 lxml 查找和迭代 html 标签的语法的帮助 以下是我正在处理的用例 HTML 文件的格式相当好 但并不完美 屏幕上有多个表格 其中一个包含一组搜索结果 每个表格包含页眉和页脚 每个结果行
  • 每天第一次调用网络服务很慢

    在构建此 Web 服务和调用它的应用程序时 我们注意到每天对该 Web 服务的第一次调用非常慢 有时甚至会超时 然而 此后的每一次通话都效果很好 有人能解释一下为什么会这样以及我们如何摆脱这种痛苦吗 提前致谢 如果是 ASP NET Web
  • 更改seaborn箱线图线彩虹颜色

    I found this beautiful graph online apparently made with plotly and wanted to recreate it with seaborn 到目前为止 这是我的代码 impo
  • AngularJS 实现模板本地化

    我想实现视图的本地化 也应该包括正文 我之前通过加载 JSON 文件并通过键进行迭代来完成此操作 键是类名 比我简单地将键的值分配给 元素与类 语言文件 JSON Header Title My Title Header Text Lore
  • Jersey 2 + HK2 - @ApplicationScoped 不工作

    我有课 ApplicationScoped public class Service private Map
  • (bool) 可靠地转换为 0 或 1 吗? [复制]

    这个问题在这里已经有答案了 来自一些reading https stackoverflow com questions 6627178 c99 why are false and true defined as 0 and 1 and no
  • iOS 中可用的路径目录

    NSSearchPathDirectory 这些常量指定各种目录的位置 enum NSApplicationDirectory 1 NSDemoApplicationDirectory NSDeveloperApplicationDirec
  • 将Angular2项目集成到Tomcat服务器中

    我为我的项目开发了一个 Spring maven Rest api 对于客户端 我使用 Angular2 和 typescript 作为 Angular 的新手 参考 Angular 网站进行开发 使用 npm 和 lite server
  • C# Winform 网格渲染在 Windows 7 上缓慢

    我注意到 C winform datagrid 在我的 windows 7 64 位机器上非常慢 对于具有 1000 行 足够的列 文本以适合屏幕宽度的标准网格 我看到滚动时出现明显的渲染延迟 即滚动 滚动条移动滞后约 0 5 秒而不是平滑