大量のリッチテキストをSQLデータベースに格納し、取得して表示する必要があります。リッチテキストを効率的に保存して表示する
1つのフォントは大丈夫ですが、フォントサイズ/太字/色が異なる必要があります。
今のところ、リッチテキストボックス(WPF)を表示するために使用しています。また、XamlWriter.Save/XamlReader.Parseを使用して、DBに格納する文字列にシリアル化しています。それはうまく動作しますが、RichTextBoxは基本的に使えないというテキストを表示するのがとても辛いです。
許容できるパフォーマンスですばやくこの方法を使用できますか?
私はGlyphRunオブジェクトを使って、各文字をビットマップとして描画し、宛先イメージなどに合わせてすべての配置要件を計算することを検討しています...しかし、単純な色付きのテキストでホイールを再作成することは、
EDIT: これまでのお返事ありがとうございました。申し訳ありません。
テキストはRichTextBox
からユーザーによって入力されますが、基本的には結果としてstring
XamlWriter.Save(richTextBox.Document)
がデータベースに保存されます。他のフィールド(double/intなど)もTextBox
からユーザによって入力されます。
ユーザーがデータベースに照会すると、上記の保存されたリッチテキストフィールドを含めて、データベース内のフィールドを使用して、色と書式が設定された読み取り専用リッチテキストページが生成されます。これらはFlowDocument
からSpan
"[thisbook]"が何らかのデータベースエントリのIDを参照しているのと同様に、InlineUIContainer
はUIElement
から派生したクラスをホストし、テキストでインライン化されたデータベースエントリを参照します。 MSDNによると、それはすべてTextBlock
のテキストがあまりにも多いという。
このテキストレンダリングは本当に遅い部分ですが、その周りには方法がありません。私はその書式設定が必要です。それはWPF RichTextBox
がどのようにしているのかです:RichTextBox
に小さな単純なテキストを入力しても、タイピング、画面上に表示される文字の間に...今の
私はまだRichTextBox
ESを使用しますが、私は(Paragraph
/Section
/Span
オブジェクト)メモリにレンダリングされたレイアウトの多くを維持し、私は少なくともを再描画するように注意しています変更/照会が行われたとき、またはデータベース・データの異なるビューがユーザーによって要求されたときに可能な書式付きテキストの量。
FormattedText
のために(それはまだ速くないのですが、それはOKですが、全体の構造(AvalonEditまたはFormattedText
またはGlyphRun
)を変更して、今それだけの価値は思えない、あまりにも多くの仕事、全体のシリアライゼーションXamlWriter.Save
とAPIとXamlReader.Parse
は多くを簡素化し、 GlyphRun
、フォーマットされたテキストをデータベースに保存するには、自分自身でファイル形式を用意する必要があります)。
OpenXML SDKを使用してMicrosoft Wordの.docxドキュメントを作成する可能性もありますが、Googleではレンダリングのパフォーマンスはあまり良くないと言います。InlineUIContainer
内のテキストにUIElement
を埋め込み、データベースに保存することが可能です(AvalonEditと同じ問題)。
を? FixedDocumentを使用できますか? –
どのくらいのテキストについて話していますか?私はFlowDocumentViewerの巨大なWPF FlowDocumentsを使って作業をしてきました。あなたはおそらくプロファイラを起動し、時間を費やしている場所を見てください。レンダリングテキスト* IS *はWPFにとって高価な操作ですが、奇妙なドキュメント構造やスタイル/色/フォント/ハイフネーションなどによってCPU計算レイアウトが壊れていないことを確認する必要があります。 – Armentage