2011-09-30 89 views
0

WPF中的一個開發應用程序在i5處理器上運行速度非常慢。 UI在嵌套Items控件中包含多個用戶控件(200+)。相同的應用程序在其中一臺桌面計算機上以良好的性能運行。WPF應用程序在i5處理器機器上變慢

下面是筆記本電腦的詳細配置,其中它的速度很慢(50秒渲染UI):

操作系統:Windows XP專業版(5.1,版本2600)的Service Pack 3(2600.xpsp_sp3_gdr。 101209-1647) 系統製造商:LENOVO 系統型號:2537W2K BIOS:版1.00PARTTBLx 處理器:Intel(R)核心(TM)15 CPU中號520 @ 2.40GHz的(4個CPU) 內存:3060MB RAM 頁文件:784MB used,5172MB available 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 設備密鑰:枚舉\ PCI \ VEN_10DE & DEV_0A6C & SUBSYS_214217AA & REV_A2 顯示內存:256.0 MB 電流模式:1680×105 0(32位)(60Hz)的 監視器:的ThinkPad顯示1440 監視器最大RES:1440,900


下面是桌面的詳細結構,其中它的快速(6秒來輸出相同UI):

操作系統:Windows XP專業版(5.1,版本2600)的Service Pack 3(2600.xpsp_sp3_gdr.101209-1647) 系統製造商:戴爾公司 系統型號:755的OptiPlex
BIOS:菲尼克斯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.0 C(4.09.0000.0904) DX設置參數:未找到 輸入dxdiag版本:5.03.2600.5512 32位的Unicode

顯示卡

卡名稱:Intel(R)Q35高速芯片組家族 廠商:英特爾公司芯片類型:英特爾(R)GMA 3100 DAC類型:內部 設備密鑰:枚舉\ PCI \ VEN_8086 & DEV_29B2 & SUBSYS_02111028 & REV_02 顯示內存:384.0 MB 電流模式:1280 * 960(32位)(60Hz)的 監視器:即插即用監視器 監視器最大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

這很大程度上取決於您所呈現的內容 - 超過200多個用戶控件,它們是什麼?有什麼影響? –

+0

我沒有得到的是爲什麼你在一臺i5機器上運行XP - 你確定你正在使用Nvidia芯片而不是集成的i5 GPU內核?在第一代他們是相當垃圾所以也許這就是你的問題 – hyp

+0

感謝您的答覆。我正在使用一個包含1個文本框和2個重複按鈕的用戶控件。這個用戶控件在嵌套的itemscontrol中呈現200次以上。上面的XAML代碼在使用嵌套itemscontrol的用戶控件中調用。 –

回答

0

您可以使用來自微軟(我的高亮顯示)WPF Performance Suite

的WPF性能套件能夠幫助您分析您的WPF應用程序運行時的行爲,並確定性能優化,你可以應用。 WPF性能套件包含稱爲Perforator的性能分析工具和Visual Profiler

渲染200+複雜UserControl'sItemsControl是很多 - 至少爲用戶進行交互。筆記本電腦的圖形肌肉可能是瓶頸。您可以考慮使用ListBox來顯示UserControl'sListBox使用VirtualizingStackPanel來啓用UI虛擬化。

另外,根據硬件上Windows XP的DirectX支持,您可能會遇到性能問題。您甚至可以嘗試在Windows XP計算機的顯示屬性中關閉硬件加速,以查看是否改進了WPF性能。

+0

我們已經試過使用它,但在Windows XP上,我們無法使用Perforator和Visual Profiler。我粘貼了我在用戶控件中使用的示例代碼。 –

相關問題