【发布时间】:2011-06-07 19:42:26
【问题描述】:
我们有一个应用程序,它有一个或多个文本控制台窗口,它们基本上都代表串行端口(文本输入和输出,逐个字符)。这些窗口已成为当前代码方式的主要性能问题......我们设法在其中花费了大量时间。
当前代码的结构是让窗口过着自己的小生命,主应用程序线程通过“SendMessage()”调用驱动它。这种消息传递似乎是令人难以置信的开销的原因。基本上,绕道操作系统感觉是错误的做法。
请注意,我们会在适当的地方将文本行作为一个整体绘制,因此已经完成了简单的优化。
我不是 Windows 编码方面的专家,所以我需要询问社区是否有其他架构来驱动窗口中的文本显示而不是发送这样的消息?看起来很重量级。
请注意,这是使用 C++ 或纯 C 编写的,因为主应用程序是可移植的 C/C++/其他一些语言程序,也可以在 Linux 和 Solaris 上运行。
我们做了更多的调查,似乎一半的开销是使用 SendMessage 准备和发送每条消息,另一半是实际的屏幕绘制。 SendMessage 在同一文件中的函数之间完成...
所以我猜下面给出的所有建议都是正确的:
- 看看有多少东西被重绘了
- 直接画东西
- 及时分块绘制操作,不要将每个字符都发送到屏幕上,以实现串行控制台的 10 到 20 Hz 更新率。
你能接受所有答案吗?
【问题讨论】:
标签: windows optimization graphics console