我正在使用 wxWidgets 和 Visual C++ 创建类似于在 GUI 中使用具有丰富格式(颜色、字体、图像)的 Unix“tail -f”的功能。我的目标是 wxMSW 和 wxMAC。
显而易见的答案是使用 wxTextCtrl 和 wxTE_RICH,调用 wxTextCtrl::SetDefaultStyle() 和 wxTextCtrl::WriteText()。
但是,在我的 3ghz 工作站上,以发布模式编译,我无法继续跟踪平均每行增长 1 毫秒的日志,最终落后。对于每一行,我都会招致:
- 两次调用 SetDefaultStyle()
- 两次调用两次 WriteText()
- 调用 Freeze() 和 Thaw() 小部件
运行此程序时,在填充了大约 20,000 行之后,我的 CPU 使用 wxMSW 在一个内核上达到 100%。一旦达到某个阈值,程序就会明显变慢,进一步落后。
我愿意使用其他控件(wxListCtrl、wxRichTextCtrl 等)。