2012-04-19 37 views
2

我們有一個TTreeView有很多節點 - 通常20,000節點和更多。此TTreeView用於停靠的界面(DevExpress Docking Library)。當應用程序中的任何表單停靠或取消停靠時,可停靠窗體的手柄都會更改。這又導致調用所有形式和控件的過程DestroyWndCreateWnd德爾福樹視圖DestroyWnd/CreateWnd slow

TTreeView的情況下,DestroyWnd將節點保存到流中,CreateWnd重新加載它們。在我們的應用程序中使用非常大的樹視圖時,會導致長時間延遲,同時節點會流出並返回。

我的問題:如何防止此延遲?我聽到很多人高度評價Virtual TreeView,我認爲這不是TTreeView的後裔,它是否避免了這個問題?我們已經嘗試了開發者快車TcxTreeView,但它從TTreeview下降,所以它遭受同樣的問題。

回答

11

20,000個節點太多了,不能放入標準的TTreeView。使用TVirtualTreeView肯定是顯示大量節點的方法。主要優點是您的節點數據不存儲在TreeView本身中。它僅用於顯示和用戶交互。您將數據存儲在內存中的其他位置,因此它不受窗口娛樂的影響,然後TVirtualTreeView會要求您提供在任何給定時間立即需要的數據片段。重新創建TVirtualTreeView窗口只是使用當前數據重新繪製窗口顯示的問題。

與標準的TTreeView不同,它將數據存儲在TreeView自身中。這就是爲什麼TTreeView.DestroyWnd()TTreeView.CreateWnd()必須在每次重新創建窗口時保存並復原所有節點數據的副本。節點越多,管理數據的開銷就越大。