c++ - 如何在不使用大量 CPU 的情况下将大量丰富的内容(图像、格式)快速附加到控件?

标签 c++ performance wxwidgets

我正在使用 wxWidgets 和 Visual C++ 创建类似于在 GUI 中使用具有丰富格式(颜色、字体、图像)的 Unix“tail -f”的功能。我的目标是 wxMSW 和 wxMAC。

显而易见的答案是使用 wxTextCtrl 和 wxTE_RICH,调用 wxTextCtrl::SetDefaultStyle() 和 wxTextCtrl::WriteText()。

但是,在我的 3ghz 工作站上,在 Release模式下编译,我无法继续跟踪每行平均增长 1 毫秒的日志,最终落后。对于每一行,我要承担:

  1. 两次调用 SetDefaultStyle()
  2. 两次调用两次 WriteText()
  3. 调用 Freeze() 和 Thaw() 小部件

运行此程序时,我的 CPU 在使用 wxMSW 填充大约 20,000 行后在一个内核上达到 100%。一旦达到某个阈值,程序就会明显变慢,进一步落后。

我愿意使用其他控件(wxListCtrl、wxRichTextCtrl 等)。

最佳答案

您是否考虑过限制 View 中的行数?当我们遇到类似问题时,我们只是确保 View 中的行数不超过 10,000 行。如果底部有更多行,我们会删除顶部的行。这不是使用 WxWidgets,它是在 Mac 上使用 native Cocoa UI,但问题是一样的。如果带样式的 TextView (带有颜色、格式和 pretty-print )变得很大,在底部附加更多数据会变得非常慢。

关于c++ - 如何在不使用大量 CPU 的情况下将大量丰富的内容(图像、格式)快速附加到控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/148881/

相关文章:

c++ - 无法使用最近的 API CL/cl2.hpp 运行任何可用的 OpenCL 示例

MySQL 大量行的性能问题

haskell - react 香蕉 : Alternate buttons events

c++ - 使用 C++ 宏查找/替换?

c++ - 我无法用 wcout 输出字符串

linux - 如何统计ARM程序执行的指令数?

Java/HashMap/性能

c++ - 使用 wxWidgets 控制 GUI

c++ - wxWidgets 大量 undefined reference

c++ - win32 C++ 打印字符串到打印机