为什么加载大字符串时富文本框会冻结?

发布于 2024-09-15 17:34:56 字数 383 浏览 3 评论 0 原文

我有一个程序,我基本上需要从 StringBuilder 加载富文本。 问题是,有时我会得到一个 100,000 行长的字符串(这是程序的可能情况),包括 Rtf 代码和颜色。

问题不在于构建字符串,而在于当我将 Rtf 属性分配给 StringBuilder.ToString() 时,需要花费 4 分钟的时间来加载。

TextBox.Rtf = Build.ToString();

如果我从 StringBuilder 复制相同的字符串,并将其加载到写字板中,则大约需要 2 或 3 秒。我使用 SendMessage() 和 WM_SETREDRAW 禁用 RTB 的重绘,但这不会改变任何内容。

有什么建议吗?

I have a program where I basically need to load Rich Text from a StringBuilder.
The problem is, somethimes I get a string that is 100,000 lines long (and this is a possible situation for the program), including Rtf codes and colours.

The problem isn't building the string, it's when I asign the Rtf property to the StringBuilder.ToString(), it takes a solid 4 minutes to load.

TextBox.Rtf = Build.ToString();

If I copy this same string from the StringBuilder, and load it in WordPad, it takes about 2 or 3 seconds. I am diabling the RTB's redrawing by using SendMessage() and WM_SETREDRAW, but that doesn't change anything.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

赤濁 2024-09-22 17:34:56

RichTextBox 使用 riched20.dll,它是 Rich Edit Control 库的 v3.0 “http://www.microsoft.com”rel="nofollow noreferrer">微软。但是,写字板使用 msfedit.dll 版本为 4.1

版本 4.1v3.0 快约 30 倍

请参阅此内容以了解有关版本的更多信息
MSDN 关于 Rich Edit 控件

RichTextBox uses riched20.dll which is the v3.0 of the library Rich Edit Control of Microsoft. However, WordPad uses msfedit.dll which is version 4.1.

Version 4.1 is about 30 times more faster than v3.0

See this for more information about versions
MSDN About Rich Edit Controls

看春风乍起 2024-09-22 17:34:56

抱歉,RTB 控件不会削减 10,000 行,更不用说 100,000 行了。

优化它的一种可能的方法是从文件或流加载,但我不怀疑会有多大改进。

Sorry, but the RTB control is not gonna cut 10,000 lines, nevermind 100,000.

One possible way to optimize it, is to load from a file or stream instead, but I dont suspect much improvement.

有深☉意 2024-09-22 17:34:56

只是猜测,但是否会触发 GC(垃圾收集器)?不过这不应该持续4分钟......

Just a guess, but could it be that the GC (garbage collector) gets triggered? That shouldn't last 4 minutes though...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文