gpt4 book ai didi

c# - 高效存储和显示富文本

转载 作者:太空狗 更新时间:2023-10-29 23:48:03 24 4
gpt4 key购买 nike

我需要在 SQL 数据库中存储大量富文本,检索并显示它。

通篇使用一种字体即可,但我需要不同的字体大小/粗体/颜色。

现在我使用 RichTextBox (WPF) 来显示它,并使用 XamlWriter.Save/XamlReader.Parse 将它序列化为字符串以存储在数据库中。它运行良好,但 RichTextBox 在显示文本时非常缓慢,以至于它基本上无法使用。

有没有一种快速的方法可以达到可接受的性能?

我正在考虑使用 GlyphRun 对象来实现它,将每个字符绘制为位图并计算所有对齐要求以适合目标图像等......但是在 2011 年,在简单的彩色/大文本上重新发明轮子似乎真的很奇怪。

编辑:感谢您的回答,直到现在才看到,抱歉。

用户也从 RichTextBoxes 输入文本,基本上我只是保存生成的 string XamlWriter.Save(richTextBox.Document) 在数据库中。其他字段(double/int 等)也由用户从 TextBoxes 输入。

当用户查询数据库时,使用数据库中的字段从头开始生成具有颜色和格式的只读富文本页面,包括上面保存的富文本字段:这些是从 FlowDocuments 到 Spans 并且对它们进行了一些替换(InlineUIContainers 托管从 UIElement 派生的类,它引用数据库条目,内嵌在文本中,例如“请参阅 [thisbook]”,其中 [thisbook] 引用某些数据库条目的 ID)。 MSDN 说所有这些对于 TextBlock 来说都是太多的文本。

文本呈现是真正缓慢的部分,但没有办法绕过它,我需要这种格式,这正是 WPF RichTextBoxes 的方式:即使在 RichTextBox是的,在输入和字符出现在屏幕上之间存在延迟...

现在我仍然使用 RichTextBoxes 但我在内存中保留了很多呈现的布局(Paragraph/Section/Span 对象),并且在进行更改/查询或用户请求数据库数据的不同 View 时,我会小心地只重新呈现尽可能少的格式化文本。

还是不快但是还可以,改变整个结构(AvalonEdit or FormattedText or GlyphRun)现在看来不值得,工作量太大,带有 XamlWriter.SaveXamlReader.Parse 的整个序列化 API 简化了很多(对于 FormattedTextGlyphRun,我会必须自己想出一种文件格式才能将格式化的文本保存到数据库中)。

也有可能使用 OpenXML SDK 创建 Microsoft Word .docx 文档,但谷歌表示渲染性能也不是很好,我不知道是否在InlineUIContainer 中的文本并将其序列化以保存在数据库中是可能的(与 AvalonEdit 相同的问题)。

最佳答案

考虑扔掉 RichTextBox 因为它非常慢(正确)。与其编写自己的文本编辑器,不如检查 AvalonEdit .在性能方面,它比 RichTextBox 更胜一筹。

或者,如果您需要只读文本,您可以尝试使用 TextBlock - 它支持简单格式:

<TextBlock>
<Run FontWeight="Bold">Hello</Run>
<Run Foreground="Green">World</Run>
<Run FontSize="24">!</Run>
</TextBlock>

关于c# - 高效存储和显示富文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com