私たちのアプリケーションでは、TStringGrid コンポーネントから TVirtualStringTree コンポーネントに移行しています。大量のデータが表示されています (最大 50000 行および 5 列)。1 つの列に 1 行以上のテキストが含まれています。stringgrid で 'DrawCell' を使用して最適なパフォーマンスで複数行の機能を実装することができました: すべての行の即時再描画 (サイズ変更時) とヒッチなしのスクロール (メモリ内に行の高さのリストがあり、再描画が必要なときに更新されます) .
この複数行の機能を VirtualStringTree に移すことは、stringgrid の代替手段ほどパフォーマンスが良くありません。数多くの実装を試みましたが、まだ成功していません。これは、VirtualStringTree インストール パッケージのデモ アプリケーションで簡単に再現できます。
- 「MultilineDemo」フォームで、VirtualStringTree の「rootNodeCount」を 10.000 に設定します。
- デモを実行するときは、[ノードの高さをノード テキストに合わせて自動的に調整する] を選択します。
最初の再描画/再描画には、大量の CPU を使用する時間がかかります。サイズを変更するたびに、トップ/ボトムにジャンプすると同じ現象が発生するか、「スタックオーバーフロー」例外が発生することさえあります (ただし、それは別の問題です...)。「OnMeasureItem」メソッドは、私が見ているように(「MouseMove」イベントでも)呼び出されすぎています。
誰かがこの問題を抱えていて、解決策を見つけることができましたか?