私は、大きなドキュメント用の「ワード プロセッサ」コントロールの .NET バージョンに取り組んでいます。これは、印刷時に最大 10000 ページを意味します。
私は数年前に配列を使用してライン ポインターを保持し、必要に応じて配列をブロック単位で拡張し、RtlMoveMemory (kernel32.dll) を呼び出してポインターをシフトする機能を Win32 で実装しました。
主なパフォーマンスの問題は次のとおりです。
- ドキュメントは 1 行目から最後まで順に読み込まれます...
- マウスの移動では、マウス カーソルを調整するために、ドキュメントの上部からの「ピクセル」オフセットで行を見つける必要があります。
- ペイントでは、オフセットによって行を見つけ、次の行を反復処理する必要があります
- 挿入と削除に時間がかかってはならない (ワードラップ)
私はについてたくさん読んだ
- SortedList: 読み込みは超高速ですが、挿入はどうでしょうか?
- SplayTree: ユーザーはマウスを同じ行に何度も移動させるので良さそうですが、ドキュメントの下部から中央までスクロールする場合はどうでしょうか?
- SkipList: 全体的に優れたパフォーマンスのように思えますが、データ量が多いとメモリに問題がありますか?
- SortedDictionary および AVL ツリー: 順番に読み込みが遅いため不適格。
- RedBlack Tree: どこが最高でも、どこが最悪でもない? これは最良の選択ですか?
これらの構造は、100 万のエントリで優れたパフォーマンスを発揮できますか? もしそうなら、最良の選択は何でしょうか?
他のアイデア/クラスを見逃した可能性があります。
可能であればマネージ コードに固執したいのですが、必要に応じてダーティ コードに切り替える準備ができています。