SWT コンポジットの作成を高速化するには、どのような方法がありますか。つまり、所要時間は次のとおりです。
new MyComposite(parent, SWT.NONE)
完了するには?
RCP アプリケーションでエディターに表示されるコンポジットがいくつかあります。データベース クエリの内容を調整した後、コンポジットの作成自体が現在の主なボトルネックであることがわかりました。たとえば、最も重要なコンポジットの作成には 350 ミリ秒かかります (Windows 7 の場合)。ロジックはまったく含まれておらず、すべてのコードは SWT デザイナーによって生成されます。(編集: したがって、この時間は完全に UI コンポーネントの作成に費やされます。この質問はデータ アクセスとは関係ありません)
これは妥当な時間だと思いますか、それとも長い時間だと思いますか?
私の最も重要なコンポジットには 4 つのセクションがあり、それぞれに最大で 6 つの列を持つ 4 つのテーブル ビューアーがあり、そのうち 2 つが CTabFolder 内に隠され、6 つのテキスト領域/フィールド、5 つのボタン、2 つの ComboViewer、合計 12 のツール アイテムを含む 2 つのツールバーがあります。私が使用する唯一のレイアウトは gridlayout です。
FormToolKit を使用してコンポーネントを作成します。それを使用しない場合と画像を使用しない場合でも、Composite コンストラクターの呼び出しには 300 ミリ秒以上かかります。
編集:今日は開いているアプリケーションが少なく、200ミリ秒で複合実行を作成します
gridlayout または filllayout のいずれかを使用してシェルで 700 個のテキスト コントロールを作成すると、640 ミリ秒かかります コンポジット内のすべてのコントロールの正確な数 (Composite.getChildren() を使用して再帰的にカウントされます):
Composite -> 9
Text -> 6
Button -> 5
Label -> 5
Table -> 4
Section -> 4
Combo -> 2
ToolBar -> 2 (containing 13 toolitems)
TabFolder -> 1
編集 2: JVisualVM プロファイラーを実行したところ、SWT デザイナーで単に expand プロパティを true に設定して追加した Section.setExpanded(true) の呼び出しに時間がかかることがわかりました。これらの呼び出しは、既に展開されているため不要でした。これにより、時間が 25% 短縮されて 150ms になりました。次に大きいのは、時間の 15% を占めるテーブル ビューアーの作成です。次に、列幅の設定にさらに 8% の時間を費やします。このほとんどの時間は、Windows へのネイティブ コールに費やされます。この後、ほとんどの時間はセクション、コンポジット、コンボビューアなどの作成に費やされます...したがって、パフォーマンスをさらに改善するためにできることはあまりないと思います。