簡體   English   中英

WPF控制大量數據的性能問題

[英]WPF controls performance issues with large amounts of data

我寫了一個日期控件,用於顯示按月布局的可變范圍的天數。 這些日期旨在顯示AM,PM或整天的雙字母代碼,並可將其背景設置為特定顏色,例如:

日歷示例

為了讓天數均勻分布並匹配日期數列,我使用了Stackpanel中包含的UniformGrid:

<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
                <ItemsControl Name="cal" ItemsSource="{Binding Days}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid  Rows="13" Columns="32" Margin="0,0,1,5" Width="1158" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <local:ucYearViewDay/>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>

這些日子都是用戶控件(這意味着INotifyPropertyChanged )我設計了支持顯示AM,PM或全天代碼。 然后將日期添加到日期控件綁定的ObservableCollection中。

問題

所有上述設置工作都是從構造函數中的調用完成的,當調用Form.Show()時,渲染表單大約需要10-12秒。

研究

我花了一點時間閱讀我能做些什么來加快速度,但我似乎無法找到任何幫助。 我試過設置ItemsControl的利用虛擬化的,如建議這個帖子但是這並沒有區別-因為我明白我只得到性能提升這樣,如果我用了大量的滾動和我控制不滾動。 MSDN上有關於提高WPF性能指南 ,我一直在研究,特別是關於數據綁定的部分,但我找不到任何有用的東西。

基於我所說的,我還有其他技術可以加快速度嗎? 我想我可以取消綁定並直接寫入控件但這將是最后的手段。

VirtualizingStackPanel.IsVirtualizing =“True”僅在將ItemPanel設置為VirtualizingStackPanel時才有效。 您可以通過編寫自己的Virtualized uniformGrid來提高性能。 請參閱以下鏈接,了解如何制作虛擬化平鋪面板。 以同樣的方式,您可以編寫自己的面板,這將提高性能。

http://blogs.msdn.com/dancre/archive/2006/02/06/implementing-a-virtualized-panel-in-wpf-avalon.aspx

基於@Erno de Weerd關於使用一些性能工具的建議,我在尋找有關VS2012中可用的性能工具的這篇文章時,我使用了'Analyze'菜單中的'Performance Analysis'選項並讓跟蹤運行。

結果對我來說非常令人驚訝。 雖然在“功能最多的個人工作”列表中加載了日歷,但它們並沒有真正脫穎而出。 一直在占用的是我通過Task.Factory.StartNew()啟動的一段代碼,它啟動了一個NamedPipeServerStream

在此輸入圖像描述

接口使用此代碼檢查到應用程序另一部分的傳入消息。 雖然我沒有注意到它減慢了應用程序的速度,但是當應用程序忙於與WPF相關的任務時,它似乎反應很糟糕。 刪除此代碼意味着日歷控件在不到兩秒的時間內加載。 我將很快重寫有問題的代碼。

所以,經驗教訓: 使用性能工具 感謝所有的評論,幫助和建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM