我有一个简单的应用程序,我正在读取一些内部变量,并将它们发布到菜单上的EditControl。
下面是一个代码片段
case 0:
        SetWindowText(GetDlgItem( gHWnd, IDC_PACKETID ), 
                     (LPSTR)std::to_string(long long(NC->mPacketNum)).c_str());
        break;所以这里发生了很多事情。我只是想把一个数字转换成可以在编辑对话框中显示的东西。这是如此缓慢,我可以从50赫兹下降到大约30赫兹,只要进入这一部分。
有什么想法可以显著提高速度吗?
发布于 2013-05-19 03:00:16
我已经通过维护上一次窗口更新的时间戳来解决这类问题。然后,我会阻止另一次更新,除非经过了一定的时间。十分之一秒的时间对我来说似乎相当不错。性能明显提高,更新看起来仍然很顺利。
发布于 2013-05-19 03:15:56
这段代码中有相当多的内容。
SetWindowText本身似乎不太可能是速度较慢的部分。让我们一块一块地把它拆开,看看时间会往哪里去。(确定的唯一方法是分析,但我不能为您这样做,所以我正在寻找可能性。这取决于您的衡量。)
SetWindowText(GetDlgItem( gHWnd, IDC_PACKETID ), 
              (LPSTR)std::to_string(long long(NC->mPacketNum)).c_str());发布于 2013-05-19 02:23:59
对于高帧率,您将希望使用Direct2D或OpenGL呈现,而不是内置的编辑窗口类。
如果你不需要高帧率,只需要高吞吐量,你可以执行InvalidateRect,只在收到PAINT消息时更改文本。Windows将限制向您发送WM_PAINT的速率。或者使用计时器。这样,您只需将新值存储在内部变量中,并在获得绘图或计时器回调时,将其从interval变量移动到编辑控件。
https://stackoverflow.com/questions/16627530
复制相似问题