有效地存储和显示富文本

Sem*_*ike 5 c# wpf performance richtextbox

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

一个字体是好的但我需要不同的字体大小/粗体/颜色.

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

是否有一种快速的方法来实现可接受的性能?

我正在考虑使用GlyphRun对象,将每个角色绘制为位图并计算所有对齐要求以适应目标图像等...但是在简单的彩色/可调整大小的文本上重新发明轮子在2011年看起来很奇怪.

编辑:谢谢你的答案,直到现在才看到他们,对不起.

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

当用户查询数据库时,使用数据库中的字段从头开始生成带有颜色和格式的只读富文本页面,包括上面保存的富文本字段:这些字段从FlowDocuments 转换为Spans,一些替换在它们(InlineUIContainer托管一个派生类的类,UIElement它引用了一个数据库条目,在文本中内联,如"see [thisbook]",其中[thisbook]引用了一些数据库条目的ID).MSDN说这一切都太多了TextBlock.

那个文本渲染是非常缓慢的部分,但没有办法解决它,我需要格式化,这就是WPF RichTextBoxes的方式:即使在es中输入一个简单的文本,RichTextBox打字和字符出现之间也会有延迟屏幕上...

现在我还在用RichTextBoxES,但我一直很多渲染的布局在内存(Paragraph/ Section/ Span对象),我小心地重新描绘只格式化文本可能最少的时候更改/查询作出或请求对数据库数据的不同视图由用户.

它仍然不是很快,但它的确定,改变整个结构(AvalonEdit或FormattedTextGlyphRun)似乎不值得,现在,太多的工作,整个序列化API与XamlWriter.SaveXamlReader.Parse简化了很多(为FormattedTextGlyphRun,我不得不拿出我自己的文件格式,用于将格式化文本保存到数据库中).

也有使用的OpenXML SDK,以创建Word文档的.docx的可能性,但谷歌表示,渲染性能是不算很好,我不知道,如果一个嵌入UIElement在内的文字InlineUIContainer和序列化到保存在数据库是可能的(与AvalonEdit相同的问题).

Anv*_*aka 1

考虑扔掉,RichTextBox因为它太慢了(准确)。不要编写自己的文本编辑器,请检查AvalonEditRichTextBox性能方面,它像婴儿一样跳动。

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

<TextBlock>
   <Run FontWeight="Bold">Hello</Run>
   <Run Foreground="Green">World</Run>
   <Run FontSize="24">!</Run>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)