是否有另一种方法可以更快地绘制大量单个字符?
这些Graphics.DrawString
方法使用 GDI+ 绘制,这往往比 GDI 慢。假设您安装了一套不错的图形驱动程序,GDI 通常是硬件加速的。唯一的例外是启用了 Aero 主题的 Windows Vista,但在 Windows 7 中已修复。您可以通过调用其中一种TextRenderer.DrawText
方法来切换到 GDI。这不仅可能比 GDI+ 快一些,而且使用 GDI 还有其他优势。唯一真正的缺点是 WinForms 不支持使用 GDI 进行打印。但这听起来对你来说不是一个问题。
假设您只针对支持它们的现代版本的 Windows,您还可以研究一些新的图形技术,如 Direct2D 和 DirectWrite。对于 C# 包装器,您可以查看Windows API 代码包(另请参阅此博客文章)。OpenGL 也可能是一种选择。我没有用过它,但速度是它的名声之一。
不幸的是,我仍然不确定这是否足够快。一百万个字符每秒 30 次,实在是一个不合理的数字。据我所知,没有任何视频输出设备能够显示这个。当然,您可以使用某种类型的缓存来代替。或者可能为您的应用程序设计一个完全不同的设计?
此外,请记住,绘制到背景缓冲区(例如,位图)通常比直接绘制到显示缓冲区(例如,监视器)要快得多。因此,您可以在此背景缓冲区上进行所有绘图,然后定期将其一次性传送到屏幕上。这种技术通常被称为“双缓冲”(因为它使用两个缓冲区),并且是一种众所周知的减少闪烁的策略。如果您需要尽快绘图,它还可以提高速度,因为它允许您这样做,同时考虑到显示输出的固有限制。
有一种方法可以画一个固定间距的字符串来达到同样的效果。这似乎不太可能。
使用固定间距绘图不会比使用比例间距提高速度。
当您编写特别关键的绘图代码时,需要牢记一些“交易技巧”,但考虑到您的期望有多高,我严重怀疑这些对您有多大用处。它们更多地用于调整算法,而不是将其性能提高多个数量级。