DataGridView 在我的两个屏幕之一上的重绘性能非常糟糕

2023-12-10

我实际上已经解决了这个问题,但我将其发布给后代。

我在双显示器系统上的 DataGridView 遇到了一个非常奇怪的问题。该问题表现为控件重绘极其缓慢(完全重绘大约需要 30 秒),但仅当它出现在我的其中一个屏幕上时。另一方面,重绘速度很好。

我有一台 Nvidia 8800 GT,带有最新的非测试版驱动程序(175. 一些)。这是驱动程序错误吗?我将把这个问题悬而未决,因为我必须忍受这种特殊的配置。 (不过,在 ATI 卡上不会发生这种情况......)

绘制速度与单元格内容无关,并且自定义绘制根本不会提高性能 - 即使仅绘制实心矩形也是如此。

后来我发现在表单上放置 ElementHost(来自 System.Windows.Forms.Integration 命名空间)可以解决该问题。它不必被弄乱;它只需要是 DataGridView 所在表单的子级即可。只要将其大小调整为 (0, 0)Visible财产是真实的。

我不想将 .NET 3/3.5 依赖项显式添加到我的应用程序中;我创建了一种使用反射在运行时(如果可以的话)创建此控件的方法。它可以工作,并且至少在没有所需库的机器上它会优雅地失败 - 它只是变慢了。

此方法还允许我在应用程序运行时应用修复,从而更轻松地查看 WPF 库在我的表单上发生的更改(使用 Spy++)。

经过大量的试验和错误后,我注意到在控件本身上启用双缓冲(而不是仅仅在表单上)可以解决这个问题!


因此,您只需要创建一个基于 DataGridView 的自定义类,这样您就可以启用它的 DoubleBuffering。就是这样!

class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    }
}

只要我的所有网格实例都使用这个自定义版本,一切都很好。如果我遇到由此导致的情况,我无法使用子类解决方案(如果我没有代码),我想我可以尝试将该控件注入到表单中:)(尽管我更有可能尝试使用反射从外部强制使用 DoubleBuffered 属性,以再次避免依赖性).

可惜这么简单的事情却占用了我这么多的时间......


您只需要创建一个基于 DataGridView 的自定义类,这样您就可以启用它的 DoubleBuffering。就是这样!


class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    } 
}

只要我的所有网格实例都使用这个自定义版本,一切都很好。如果我遇到由此导致的情况,我无法使用子类解决方案(如果我没有代码),我想我可以尝试将该控件注入到表单中:)(尽管我'我们更有可能尝试使用反射从外部强制启用 DoubleBuffered 属性,以再次避免依赖)。

可惜这么简单的事情却占用了我这么多的时间......

注意:将答案作为答案,以便将问题标记为已回答

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

DataGridView 在我的两个屏幕之一上的重绘性能非常糟糕 的相关文章

  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • DateTime.Parse("2012-09-30T23:00:00.0000000Z") 始终转换为 DateTimeKind.Local

    我想解析一个表示 UTC 格式的日期时间的字符串 我的字符串表示形式包括 Zulu 时间规范 该规范应指示该字符串表示 UTC 时间 var myDate DateTime Parse 2012 09 30T23 00 00 0000000
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 在所有浏览器中启用我的网站的平滑滚动

    我正在开发一个视差滚动网站Stellar http markdalgleish com projects stellar js and Skrollr https github com Prinzhorn skrollr图书馆 该网站在 F
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 降低Python中的浮点精度以提高性能[重复]

    这个问题在这里已经有答案了 我正在树莓派上使用 python 我使用互补滤波器从陀螺仪中获得更好的值 但它消耗了太多树莓派的电量 大约为 70 我认为可以通过降低浮点精度来提高性能 现在 结果大约有 12 位小数 这超出了我的需要 有什么办
  • 处理双 NaN 和 Inf 时的 ILASM 问题

    我创建了一个简单的程序 并初始化了双精度类型值 var a double NaN 我使用 Visual Studio 2019 net Framework 4 5 构建项目 并使用 ILDASM exe 版本 4 0 30319 0 将其反
  • 签署.net核心程序集的正确方法

    我正在尝试签署 net core 库 但我不确定我是否正确执行了所有操作 1 使用VS命令提示符IS调用sn k mykey snk 2 复制mykey snk到我的项目文件夹 3 in project json添加了密钥文件 framew
  • 如何使用 DateTime 计算已经过去了多少时间?

    我有一个启动操作的按钮单击事件 private void Diagnose Click object sender EventArgs e processfinish false timer2 Enabled true timerCount
  • KeyValuePair - 没有无参数构造函数?

    我有一个具有 KeyValuePair 类型属性的对象 我想从数据库读取一些数据并将结果存储在这个 KeyValuePair 类型字段中 myObject KeyValuePairs ctx ExecuteQuery
  • 将父控件的属性传递给子控件

    我正在为特定应用程序开发一组自定义控件 我想定义对于外观目的的控件集通用的属性 为了论证 让我们这样做CustomCtrl AccentColor 我想为我的 Windows 窗体定义相同的属性 即Form1 AccentColor当我更改
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • Asp.net core默认路由

    简化版Startup code public void ConfigureServices IServiceCollection services services AddMvc public void Configure IApplica
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 如何在 Windows CE 中使用 VB.Net 访问条码扫描仪

    最近我被要求开发一个应用程序摩托罗拉 MK4000 http www motorola com Business US EN Business Product and Services Micro Kiosks Micro Kiosks M
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何使用 VB.NET 打开受密码保护的共享网络文件夹?

    我需要在网络上打开受密码保护的共享文件夹才能访问 Access 97 数据库 如何打开文件夹并输入密码 在这里找到http www mredkj com vbnet vbnetmapdrive html http www mredkj co
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 具有多次重复的 scikit-learn GridSearchCV

    我正在尝试为 SVR 模型获取最佳参数集 我想使用GridSearchCV超过不同的值C 然而 从之前的测试中 我注意到训练 测试集的划分极大地影响了整体性能 在本例中为 r2 为了解决这个问题 我想实现重复的 5 倍交叉验证 10 x 5
  • C# 中的 CS0649 错误

    代码中存在一个我找不到的错误 某些变量根本无法工作 我收到的警告 CS0649 字段 Calculations A 从未分配 并且始终具有默认值 0 ABC Formule path Calculations cs CS0649 字段 Ca
  • Ruby 哈希值总和

    我有一个哈希数组 players id gt 1 name gt Alda dice count gt 5 hand gt 6 5 2 4 3 id gt 2 name gt Gonzalo dice count gt 5 hand gt
  • Directdraw:旋转视频流

    Problem Windows Mobile Directdraw 旋转视频流 视频预览正在工作 我现在需要的只是旋转图像的方法 我认为处理这个问题的唯一方法是编写一个基于的自定义过滤器CTransformFilter这将为您旋转相机图像
  • Linux 找不到动态链接的应用程序

    我有一个运行 Linux Kernel 3 10 和 Busybox 的嵌入式系统 如果我交叉编译 由 bu ildroot 构建工具链 因此使用 uclibc 一个没有 static 标志的程序 它不会运行 bin sh hellowor
  • 频繁登录和退出后 Google 登录失败

    我最初可以多次使用 Google 帐户登录我的应用程序 一切安好 但如果我在一两分钟内签入和签出大约 20 次 Google 登录失败并重新登录onActivityResult函数 返回错误代码12501 resultCode 0 我使用的
  • svm scikit learn 中的类权重 = none 和 auto 之间有什么区别

    在 scikit learn svm 分类器中 class weight None 和 class weight Auto 之间有什么区别 从文档中它给出为 将类 i 的参数 C 设置为 SVC 的 class weight i C 如果没
  • 有两个变量的“for 循环”? [复制]

    这个问题在这里已经有答案了 如何在同一个变量中包含两个变量for loop t1 a list of integers strings and lists t2 another list of integers strings and li
  • 从重复值中提取 DataFrame

    我有一个 DataFrame 其中有一列 其中存储了与不同数据相关的更多重复项 A B 1 120 abc 2 121 def 3 122 ghi 4 121 abc 5 120 def 6 121 def 7 122 abc 8 121
  • 从 C# 调用 Outlook VBA 代码

    在 Visual Studio 中 我正在创建一个插件 在 addin startup 中 我将 Outlook 应用程序设置为 app Microsoft Office Interop Outlook ApplicationClass M
  • Android 上的“transition”是无效的资源目录名称吗?

    我从 Android 示例项目创建了 ApiDemos 项目 不幸的是 该项目抱怨invalid resource directory name transition ApiDemos res line 1 Android AAPT Pro
  • 设置导航栏标题的对齐方式

    我试图将导航栏的标题与我的应用程序的中心对齐 但标题似乎保留在右侧 请查找屏幕截图 我正在使用下面的代码 void viewDidLoad UIBarButtonItem addButton UIBarButtonItem alloc in
  • 如何在媒体播放器中播放字节数组中的视频

    我正在使用连接到我的 Android 设备的 USB 设备 该设备向我发送一个包含视频帧的缓冲区 它不断地剂量 当我收到缓冲区时 我应该将特定的标头放入其中并将其作为 m4v 视频文件写入 SD 卡 那我应该在媒体播放器中播放它 到目前为止
  • sql IN 运算符

    我有下面的 sql 但无法让它工作 select product category select top 1 sub category from sub categories where product category IN keywor
  • WebDriver 无法使用 xpath 找到元素,Htmlagilitypack 无法

    我在使用 Html Agility Pack 时不断遇到问题 我的 XPath 查询仅在极其简单时才有效 id some id or input 然而 当它们变得更加复杂时 Html Agility Pack 就无法处理它 下面是一个演示该
  • 确定控制台输出的结尾

    我在我的应用程序中收到控制台输出 我使用的代码来自here 已接受的解决方案 但我从来没有得到过null in my 输出接收到的数据 相反 我有字符串 空在输出的末尾 使用 String NullOrEmpty 而不是仅仅与 null 进
  • 获取每所学校前 10 名学生的平均值

    我们的学区有 38 所小学 孩子们参加了测试 各学校的平均分很分散 但我想比较每所学校前 10 名学生的平均分 要求 仅使用临时表 我以一种工作量很大 很容易出错的方式完成了这件事 如下所示 sch code 例如 9043 scabbre
  • Python 格式百分比

    我使用以下代码片段将比率转换为百分比 2 1f format value 100 这正如您所期望的那样工作 我想扩展它 以便在边缘情况下提供更多信息 其中舍入比率为 0 或 1 但不完全是 有没有更Pythonic的方法 也许使用forma
  • 将偏移行添加到给定范围。 Excel VBA

    我有一个变量 它在开始时设置为给定范围 我想要一个循环语句 它将从给定范围的末尾向下取下一行并将其添加到该范围 ie myRows Range 1 10 For Each cell in myRows If cell Value gt 20
  • DataGridView 在我的两个屏幕之一上的重绘性能非常糟糕

    我实际上已经解决了这个问题 但我将其发布给后代 我在双显示器系统上的 DataGridView 遇到了一个非常奇怪的问题 该问题表现为控件重绘极其缓慢 完全重绘大约需要 30 秒 但仅当它出现在我的其中一个屏幕上时 另一方面 重绘速度很好