WPF中开发的应用程序之一在i5进程笔记本电脑上运行速度非常慢。 UI在嵌套的Items控件中包含多个用户控件(200+)。相同的应用程序在其中一台台式机中运行良好。
下面是笔记本电脑的详细配置,它非常慢(渲染用户界面50秒):
操作系统:Windows XP Professional(5.1,Build 2600)Service Pack 3(2600.xpsp_sp3_gdr.101209-1647) 系统制造商:LENOVO 系统型号:2537W2K BIOS:Ver 1.00PARTTBLx 处理器:英特尔(R)酷睿(TM)i5 CPU M 520 @ 2.40GHz(4个CPU) 内存:3060MB RAM 页面文件:使用784MB,可用5172MB Windows目录:C:\ WINDOWS DirectX版本:DirectX 9.0c(4.09.0000.0904) DX设置参数:未找到 DxDiag版本:5.03.2600.5512 32位Unicode
显示
卡名:NVIDIA NVS 3100M 制造商:NVIDIA 芯片类型:NVS 3100M DAC类型:集成RAMDAC 设备密钥:Enum \ PCI \ VEN_10DE& DEV_0A6C& SUBSYS_214217AA& REV_A2 显示内存:256.0 MB 当前模式:1680 x 1050(32位)(60Hz) 显示器:ThinkPad Display 1440x900 Monitor Max Res:1440,900
以下是桌面的详细配置,其快速(6秒渲染相同的用户界面):
操作系统:Windows XP Professional(5.1,Build 2600)Service Pack 3(2600.xpsp_sp3_gdr.101209-1647)
系统制造商:戴尔公司
系统型号:OptiPlex 755
BIOS:Phoenix ROM BIOS PLUS版本1.10 A04
处理器:Intel(R)Core(TM)2 Duo CPU E6550 @ 2.33GHz(2个CPU)
内存:2004MB RAM
页面文件:使用1544MB,可用2353MB
Windows目录:C:\ WINDOWS
DirectX版本:DirectX 9.0c(4.09.0000.0904)
DX设置参数:未找到
DxDiag版本:5.03.2600.5512 32位Unicode
显示卡
卡名:英特尔(R)Q35高速芯片组系列 制造商:英特尔公司 芯片类型:Intel(R)GMA 3100 DAC类型:内部 设备密钥:Enum \ PCI \ VEN_8086& DEV_29B2& SUBSYS_02111028& REV_02 显示内存:384.0 MB 当前模式:1280 x 960(32位)(60Hz) 监视器:即插即用监视器 Monitor Max Res:1600,1200 驱动程序名称:igxprd32.dll 驱动程序版本:6.14.0010.4837(英文)
请帮助我了解降低渲染速度的原因。
<Grid x:Name="grid" Margin="3,0,0,15" HorizontalAlignment="Center" VerticalAlignment="Top"
IsEnabled="{Binding IsEnableOrDisableControl}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70*" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="05" />
<RowDefinition Height="15" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<AppUserControl:NumericUPDown Value="{Binding Total, Mode=TwoWay}"
MinValue="2" MaxValue="{Binding MaxValue}" Grid.Column="0"
Grid.Row="0"
x:Name="NoOfFltr"
/>
<Button Background="Transparent" BorderBrush="Transparent" BorderThickness="0"
Grid.Column="2" Grid.Row="0" ToolTip="Plot" HorizontalAlignment="Left"
>
<Button.Content>
<Image Width="16" Height="16">
<Image.Source>
<BitmapImage UriSource="..\Pictures\icon.png" DecodePixelWidth="16" />
</Image.Source>
</Image>
</Button.Content>
<Button.InputBindings>
<MouseBinding Gesture="CTRL+LeftClick" Command="{Binding OpenNewWindowCommand}" CommandParameter="0" />
<MouseBinding Gesture="LeftClick" Command="{Binding OpenCommand}" CommandParameter="1" />
</Button.InputBindings>
</Button>
<TextBlock Text="Text1" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="0" />
<TextBlock Text="Text2" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="2" />
<TextBlock Text="Text3" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="4" />
<TextBlock Text="Text4" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Row="2" Grid.Column="6" />
<Grid Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="7" HorizontalAlignment="Left" Height="{Binding DataParameterHeight}">
<ItemsControl Name="BiquadItem" ItemsSource="{Binding Parameters }">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70*" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
<ColumnDefinition Width="05" />
<ColumnDefinition Width="65" />
</Grid.ColumnDefinitions>
<ComboBox Name="cmbType" Width="70" HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding Source={StaticResource mdwType}}" Grid.Column="0" SelectedValue="{Binding bqType, Mode=TwoWay}" >
</ComboBox>
<AppUserControl:UnitUpDown Value="{Binding frq, Mode=TwoWay}" MinValue="0"
MaxValue="24000" Grid.Column="2" IsEnabled="{Binding Status}" Increment="1"
/>
<AppUserControl:NumericUPDown Value="{Binding scale, Mode=TwoWay}"
Grid.Column="4" IsEnabled="{Binding Status}" DecimalPoint="2" Increment="0.01"
MinValue="{Binding ElementName=biquadGrid, Path=DataContext.MinVal}"
MaxValue="{Binding ElementName=bqgrid, Path=DataContext.MaxVal}" />
<AppUserControl:NumericUPDown Value="{Binding qFactors, Mode=TwoWay}"
MinValue="0.001" MaxValue="24" Grid.Column="6" IsEnabled="{Binding qStatus}" DecimalPoint="3" Increment="0.01"
/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Grid>
答案 0 :(得分:0)
您可以使用Microsoft的WPF Performance Suite(我的亮点):
WPF Performance Suite使您可以分析WPF应用程序的运行时行为,并确定可以应用的性能优化。 WPF Performance Suite包括称为Perforator和 Visual Profiler 的性能分析工具。
在UserControl's
内渲染200多个复杂ItemsControl
非常多 - 至少对于用户来说与之交互。笔记本电脑的图形肌肉可能是瓶颈。您可以考虑使用ListBox
来显示UserControl's
。 ListBox
使用VirtualizingStackPanel
启用UI虚拟化。
此外,根据硬件上Windows XP上的DirectX支持,您可能会遇到性能问题。您甚至可以尝试在Windows XP计算机的显示属性中关闭硬件加速,以查看是否可以提高WPF性能。