我有實際上是兩個問題,但他們那種關係所以在這裏他們去爲一體的...懶惰和遞延的TreeViewer問題
如何確保當前未使用的TreeViewer
顯示樹節點的垃圾收集(SWT.VIRTUAL
)和ILazeTreeContentProvider
? 如果一個節點有5000個子節點,一旦它們被查看者顯示出來,它們就永遠不會被釋放,因此,如果你的樹有很多節點和樹葉並且堆的大小不夠大,內存就會出錯。 是否有某種最佳實踐如何避免內存泄漏,由永不閉合的視圖持有大量的數據(數十萬對象甚至數百萬)樹視圖? 也許可能有一些回調界面可以讓觀看者/內容提供者元素具有更大的靈活性?
是否可以結合對單個TreeViewer
(SWT.VIRTUAL
)的加載(DeferredTreeContentManager
)和延遲(ILazyTreeContentProvider
)? 就我所知,通過查看示例和API,只能在給定時間使用任一個,但不能同時使用兩個,例如, , 僅獲取給定節點的可見子項,並使用Job API在單獨的線程中獲取它們。讓我困擾的是,延期方法 加載所有孩子。儘管在不同的線程中,您仍然會加載所有元素 ,即使只有最小的子集一次顯示。
我可以提供代碼示例我的問題,如果需要......
我目前正在與那些掙扎自己,所以如果我設法拿出與此同時東西我會很樂意在這裏分享。
謝謝!
問候, Svilen
對於延遲加載,查看者向提供者報告將顯示特定元素(由於滾動或展開)。使用內容提供者方法中的作業可以輕鬆實現當前的延遲實現。 兩種方法都存在問題,爲什麼它們可能是獨佔的:延遲加載假定您事先知道元素數,並在內容顯示時替換查看器的內容。您不希望加載內容(例如,從遠程資源),每次用戶滾動或擴展某些內容時。 – benez 2015-08-26 20:31:14