
Fastest API for rendering text in Windows Forms?我们需要优化 C# Windows 窗体应用程序的文本渲染,该应用程序在不规则网格中显示大量小字符串。任何时候都可能有超过 5000 个可见的单元格,每秒更新 4 次。各个单元格的字体系列和大小是一致的,但颜色可能因单元格而异,粗体/斜体/纯色也是如此。 我在网上看到关于 我在 Windows XP 和 Windows Vista 上也看到了截然不同的结果,但我的主要目标是 Windows XP。有望取得重大进展的文章 这里最好的方法是什么?我不怕引入一个小的 C /CLI 层并优化设备上下文处理以挤出更多性能,但我想要一些关于采取哪个方向的明确建议。 编辑: 一位 Microsoft 开发人员在他的博客上发布了 GDI 与 GDI 文本渲染性能的文章,该文章回答了原始速度问题:在他的系统上,GDI DrawText 的速度比 GDI DrawString 快大约 6 倍。 如果你想成为一个真正的速度恶魔,TextOut 比 DrawText 快,但你必须自己处理剪辑和自动换行。 ExtTextOut 支持剪辑。 GDI渲染(TextRenderer)会更符合Windows其他部分使用GDI; GDI 试图独立于设备,因此一些间距和加粗是不一致的。有关呈现不一致的示例,请参阅 SQL Server 2005 外围应用配置工具。 即使使用 GDI,5000 文本渲染也很慢,尤其是在您需要滚动时。创建一个单独的渲染线程,每 200 毫秒通知 UI 线程,并对当前结果进行 bitblt。它提供了流畅的用户体验。 在我的 Windows 7 64 位系统上,TextOut 甚至比 DrawString 慢一点! TextRenderer.DrawText 比 DrawString 慢得多。 创建一个 C /CLI 互操作类以在本机代码中进行绘图将导致疯狂快速的绘图。我们已经见证并衡量了这一点。 如果您不愿意这样做,我们发现 graphics.DrawString 只比 TextRenderer.DrawText 快一点。 一般来说,GDI 在绘图方面比 GDI 更快。我从事的项目必须绘制数千行和文本字符串,并且从 GDI 切换到 GDI 显着提高了性能。那是使用 Windows XP,所以我无法评论 Vista。我还建议对绘图使用双缓冲来提高性能。创建一个兼容的离屏位图并在每次需要绘制时重复使用。 根据最近的经验,最快的文本输出是通过带有 |