【问题标题】:Why is wxTextCtrl so slow at displaying text?为什么 wxTextCtrl 显示文本这么慢?
【发布时间】:2011-01-08 17:40:10
【问题描述】:

我有一个 wxTextCtrl,我需要在其中放入一个非常大的字符串。 (就像一个 15 MB 的字符串)唯一的问题是它很慢。这是我正在做的事情:

char * buff = ...
wxString data(buff, wxConvUTF8);
text->ChangeValue(data);

但是,这不是瓶颈。只要此代码块所在的函数返回,就会发生这种情况。整个应用程序冻结约 30 秒。我在 ChangeValue 之后尝试了 wxYield,这导致字符串的前几行显示在控件中,但之后它仍然冻结。我怎样才能避免这种情况?

我必须强调,ChangeValue 几乎是立即返回的。延迟发生在这之后,可能在 wxTextCtrl 的内部消息处理程序或其他东西中。

【问题讨论】:

  • 听起来设计 wxTextCtrl 的人并没有预料到有人会在其中塞入一个 15 mb 的字符串(大约是整本编程书的大小)。
  • 可以实现分页机制,一次只加载总文本的一个小窗口。这种方法应该几乎是即时的。不过,我没有足够的 wxWidgets 专业知识来告诉你如何做到这一点。

标签: wxwidgets large-files wxtextctrl


【解决方案1】:

wxTextCtrl 仅包装了操作系统的标准文本控件,因此wxTextCtrl 的任何限制也很明显。您可以做的是改用wxStyledTextCtrl,它能够加载数兆字节的文本并且不需要很长时间。您甚至可以通过设置样式来突出显示日志的某些部分(例如读取中的错误消息),但这可能会再次增加加载时间。

【讨论】:

  • 更新:我发现了是什么让它这么慢 - 我的行号代码,我现在已经修复了。
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 2018-10-08
  • 2016-09-28
  • 2020-02-08
  • 2012-07-17
  • 2011-11-07
  • 2015-08-24
  • 2013-08-06
相关资源
最近更新 更多