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