gpt4 book ai didi

windows - 加速 Windows 上的文本输出,用于控制台

转载 作者:可可西里 更新时间:2023-11-01 11:41:35 28 4
gpt4 key购买 nike

我们有一个应用程序,它有一个或多个文本控制台窗口,这些窗口基本上都代表串行端口(文本输入和输出,一个字符接一个字符)。这些窗口已经变成了它们当前编码方式的主要性能问题……我们设法在其中花费了大量时间。

当前代码的结构是让窗口过着自己的小生活,主应用程序线程通过“SendMessage()”调用驱动它。这种消息传递似乎是令人难以置信的开销的原因。基本上,绕过操作系统感觉是错误的做法。

请注意,我们确实在适当的地方将文本行绘制为一个整体,因此已经完成了简单的优化。

我不是 Windows 编码方面的专家,所以我需要问社区是否有其他架构来驱动窗口中的文本显示而不是像这样发送消息?它看起来很重量级。

请注意,这是使用 C++ 或纯 C 语言编写的,因为主要应用程序是可移植的 C/C++/一些其他语言程序,也可以在 Linux 和 Solaris 上运行。

我们做了更多的调查,似乎一半的开销是使用 SendMessage 准备和发送每条消息,另一半是实际的屏幕绘制。 SendMessage 在同一文件中的函数之间完成...

所以我想下面给出的所有建议都是正确的:

  • 查看重画了多少东西
  • 直接画东西
  • 及时分块绘图操作,不要将每个字符都发送到屏幕上,以串行控制台的 10 到 20 Hz 更新速率为目标。

你能接受所有答案吗?

最佳答案

我同意 Will Dean 的观点,即在控制台窗口或文本框中绘图本身就是性能瓶颈。您首先需要确定这不是您的问题。你说你把每条线都画成一个整体,但如果数据吞吐量太高,即使这样也可能是个问题。

我建议您不要使用 SendMessage 将数据从主应用程序传递到文本窗口。相反,请使用其他一些通信方式。这些是在同一个过程中吗?如果没有,您可以使用共享内存。在某些情况下,甚至磁盘中的文件也可以。让主应用程序写入此文件,文本控制台从中读取。您可以向文本控制台发送 SendMessage 通知以通知它更新 View 。但是不要在新线路到达时发送消息。定义两次后续更新之间的最小间隔。

关于windows - 加速 Windows 上的文本输出,用于控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380490/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com