レイジーと繰延TreeViewerの質問
-
22-09-2019 - |
質問
私は、実際には2つの質問を持っているが、彼らは、彼らは1 ...
のように行くので、ここで親切に関連のあります現在TreeViewer
(SWT.VIRTUAL
)とILazeTreeContentProvider
を使用して表示されていないツリーノードのガベージコレクションを確保するための方法は?
ノードは、5000人の子供を持っている場合は、それらがビューアで表示された後、彼らは、手放すことはありません
したがって、メモリ不足エラー、あなたのツリーは、ノードと葉ではなく、大きな十分なヒープサイズの大きな数を持っている場合。
データ(何千ものオブジェクト、あるいは何百万、数百)の偉大な量のtreeviewerを保持決して閉じビューによって引き起こされるメモリ漏れを避けるためにどのようにベストプラクティスのいくつかの種類がありますか?
おそらく、多分、視聴者/コンテンツプロバイダの要素をより柔軟にできるように、いくつかのコールバックインタフェースがありますか?
これは、単一のDeferredTreeContentManager
(ILazyTreeContentProvider
)のためdeffered(TreeViewer
)と遅延(SWT.VIRTUAL
)ロードを組み合わせることが可能ですか?
限り、私は例とAPIを見て、理解し、例えば、所定の時間ではなく、両方一緒にどちらか一方を使用することが可能なだけです、
指定されたノードのみ閲覧子供をフェッチし、ジョブのAPIを使用して別のスレッドでそれらを取得します。どのような私を気にすると、その繰延アプローチです
負荷のすべての子供たち。別のスレッドでいますが、それはまだすべての要素を読み込みます
たとえ最小限のサブセットが一度に表示されます。
必要であれば、私は私の質問にコードの例を提供することができます...
私はその間、私は喜んでここにそれを共有することになります。で何かを思い付くために管理する場合は、私は現在ので、それらの自分自身に苦しんでいます
ありがとうございます。
よろしく、 Svilen
解決
私は、Eclipseフレームワークは時々統合失調症見つけます。私はそれがDeferredTreeContentManager
に関連するILazyTreeContentProvider
は、これらのケースの一つであることは疑います。
別の例では、のEclipseConでこの1年間、彼らはあなたが一度に必要なバインディングコンテキストにあなたのモデルを適応させるアダプタ工場(IAdapterFactory)を使用することをお勧めします。たとえば、あなたがあなたのモデルは、このようにそれを行うには、ツリーに表示するかどうます。
treeViewer = new TreeViewer(parent, SWT.BORDER);
IAdapterFactory adapterFactory = new AdapterFactory();
Platform.getAdapterManager().registerAdapters(adapterFactory, SomePojo.class);
treeViewer.setLabelProvider(new WorkbenchLabelProvider());
treeViewer.setContentProvider(new BaseWorkbenchContentProvider());
あなたのアダプタを登録し、BaseWorkbenchContentProviderは、工場での適応を見つけるでしょう。素晴らしい。計画のような音ます。
「ああバイウェイ、あなたが大規模なデータセットを持っている場合、このようにそれを行ってください」、と彼らは言う:
TableViewertableViewer = new TableViewer(parent, SWT.VIRTUAL);
// skipping the noise
tableViewer.setItemCount(100000);
tableViewer.setContentProvider(new LazyContentProvider());
tableViewer.setLabelProvider(new TableLabelProvider());
tableViewer.setUseHashlookup(true);
tableViewer.setInput(null);
これは、第1および第2の実施例だけでなく、互換性がないことが判明したが、彼らは相互に排他的です。一般的な計画または多分APIを持っていなかった、おそらく異なるチームによって実装されるこれらの2つのアプローチは、共通のフレームワークへの移行の途中です。それにもかかわらず、あなた自身にしている。