2011-09-12 39 views
0

在高層次上,我的應用程序根據類型將大約5個不同的DataTemplates應用於一組ListBoxItems。這些項目在特定的x,y點佈置在畫布上。我在ListBox上實現了虛擬化,似乎並沒有改善完成渲染線程進程所需的時間。用戶完全加載和使用UI仍需要大約8-12秒。我認爲虛擬化會幫助解決這個問題,但環顧四周後,它看起來只能幫助處理大量數據的滾動。我在這個假設中是否正確,並且其他人是否還有其他技巧來改進渲染線程。這是我遇到的唯一問題,然後我的項目完成。感謝StackOverflow!渲染虛擬化後線程仍然很慢

+2

你能展示XAML嗎? – Bas

+0

我不允許發佈任何代碼,對不起。我會看看我是否可以把它放在這裏。這是一組非常龐大的代碼,我知道這完全沒有幫助。 – jes9582

+0

僅當從VS運行時纔會出現問題。如果你直接運行.exe,你是否仍然有問題?它可能有一些綁定錯誤,你沒有看到。嘗試設置presentationtrace = high並運行一次以查看是否有任何錯誤。 – Paparazzi

回答

0

是的,ListBox虛擬化用於滾動。當您在ListBox中有大量項目時,啓用虛擬化將僅顯示可見項目(用於滾動的一些額外項目),而滾動列表框將替換渲染項目中的數據而不是渲染新項目。

如果你要發佈一些代碼,也許我們可以做一些性能調整

+0

我將在會議後發佈一些通用代碼。我根據嚴格的政策張貼代碼抱歉 – jes9582

1

虛擬化意味着你已經看到僅創建的項目,然後動態地銷燬/創建新的項目,如您滾動您提供幫助。另一種方法是一次爲所有項目創建所有UI控件。

這聽起來像你有其他應用程序的更大的問題。你是否在後臺線程上執行所有加載操作? UI控制樹確實非常複雜嗎?你正在顯示100個或1000個項目?

1

我們在WPF中的性能方面也遇到了很多麻煩。最好的方法當然是分析你的應用程序。我們使用ANTS性能分析器,但任何.NET分析器都可以。由於查找了我們的XAML資源,我們獲得了巨大的性能。這就是我可以給你的建議: 儘量減少XAML中的所有資源。但不僅如此,也儘量減少您擁有的XAML文件的數量。你可以嘗試的一件事是讓你加載DataTemplate的複雜部分。與在瀏覽器中加載JPEG時發生的情況相似,首先您會看到一個像素化圖像,它在完成加載JPEG後會更加精細。要做到這一點,首先使用一個更簡單的DataTemplate,然後如果這是可見的,只需按需或稍後加載複雜模板。 但是,如果沒有更多關於您的具體問題的信息,我們只能猜測。 This是我的一個老問題,關於一個類似的主題,也許這將有助於。

+0

我有類似的經驗dowhilefor。 SP1似乎可以幫助並重啓 – Paparazzi