WPF应用程序在i5处理器机器上放慢速度

时间:2011-09-30 07:37:07

标签: wpf performance itemscontrol

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>

1 个答案:

答案 0 :(得分:0)

您可以使用Microsoft的WPF Performance Suite(我的亮点):

  

WPF Performance Suite使您可以分析WPF应用程序的运行时行为,并确定可以应用的性能优化。 WPF Performance Suite包括称为Perforator和 Visual Profiler 的性能分析工具。

UserControl's内渲染200多个复杂ItemsControl非常多 - 至少对于用户来说与之交互。笔记本电脑的图形肌肉可能是瓶颈。您可以考虑使用ListBox来显示UserControl'sListBox使用VirtualizingStackPanel启用UI虚拟化。

此外,根据硬件上Windows XP上的DirectX支持,您可能会遇到性能问题。您甚至可以尝试在Windows XP计算机的显示属性中关闭硬件加速,以查看是否可以提高WPF性能。