2015-11-18 3 views
0

Я не знаю, насколько расплывчатым это может звучать, поэтому, если вам требуется дополнительная информация, пожалуйста, дайте мне знать!C# Пользовательский интерфейс приложения WPF очень медленный на других компьютерах

Я закончил свою программу, и я попытался запустить ее на других машинах, я не использовал никаких инсталляторов для ее развертывания, я просто использовал программу debug/releaseName.exe после ее компиляции.

Мой вопрос в том, что есть причина, почему моя программа работает невероятно медленно, когда она не работает в системе, на которой она была скомпилирована? весь пользовательский интерфейс отстает, так как в нем требуется несколько разделов, чтобы переключиться на другую вкладку, работая на своем родном компьютере, она работает совершенно гладко.

Я пробовал мастер публикации, поэтому я не думаю, что это поможет. Мне было интересно, связано ли это с любыми моими xaml, DLL или зависимостями программы? На данный момент у меня нет никаких фотографий или ресурсов, на которые он опирается.

Любые советы по любым изменениям, которые я могу сделать для обеспечения этого более гладко, были бы весьма признательны.

Вот мой MainWindow Xaml:

 <Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:custom="clr-namespace:RemotePatch" 
    x:Class="RemotePatch.MainWindow" 
    mc:Ignorable="d" 
    Title="Remote Patch" Height="350" Width="525" AllowsTransparency="True" WindowStyle="None" ResizeMode="CanResizeWithGrip" Loaded="Window_Loaded_1" Closed="Window_Closed"> 

<Window.Effect> 
    <DropShadowEffect BlurRadius="0" ShadowDepth="0" Direction="0" Opacity="0"/> 
</Window.Effect> 
<Grid RenderTransformOrigin="0.497,0.518"> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="32" /> 
     <RowDefinition/> 
     <RowDefinition Height="317*"/> 

    </Grid.RowDefinitions> 


    <Grid.Background> 
     <RadialGradientBrush Center="0.5,0.6"> 
      <GradientStop Color="#FF1A8BA2"/> 
      <GradientStop Color="#FF293855" Offset="1"/> 
      <GradientStop Color="#FF1799AE" Offset="0.043"/> 
     </RadialGradientBrush> 
    </Grid.Background> 
    <Rectangle Fill="#FFF4F4F5" Height="29" Stroke="Black" VerticalAlignment="Top" Opacity="0" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"/> 
    <TabControl x:Name="tabControl" Margin="0,5,0,16" Grid.Row="2" > 
     <TabControl.Resources> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Border x:Name="Border" BorderThickness="1,1,1,0" BorderBrush="Gainsboro" CornerRadius="4,4,4,4" Margin="2,0"> 
           <ContentPresenter x:Name="ContentSite" 
            VerticalAlignment="Center" 
            HorizontalAlignment="Center" 
            ContentSource="Header" 
            Margin="10,2"/> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter TargetName="Border" Property="Background" Value="LightSkyBlue" /> 
           </Trigger> 
           <Trigger Property="IsSelected" Value="False"> 
            <Setter TargetName="Border" Property="Background" Value="White" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.Resources> 
     <TabControl.Foreground> 
      <ImageBrush/> 
     </TabControl.Foreground> 

     <TabControl.BorderBrush> 
      <ImageBrush/> 
     </TabControl.BorderBrush> 
     <TabControl.Background> 
      <ImageBrush/> 
     </TabControl.Background> 
     <TabItem Header="General" Margin="0,7,0,-7"> 
      <TabItem.Background> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="Black" Offset="0"/> 
        <GradientStop Color="#FF040101" Offset="1"/> 
       </LinearGradientBrush> 
      </TabItem.Background> 


      <Grid> 
       <ListBox x:Name="listBox1" Margin="4,154,358,0" Foreground="White" Background="#FF14142E"/> 
       <TextBox x:Name="txtFile" Height="18" Margin="79,80,264,0" TextWrapping="Wrap" VerticalAlignment="Top" Background="#FF14142E" Foreground="White" MinWidth="56"/> 
       <TextBox x:Name="txtPSexec" Height="18" Margin="79,47,264,0" TextWrapping="Wrap" VerticalAlignment="Top" Background="#FF14142E" Foreground="White" MinWidth="56" /> 
       <TextBox x:Name="txtGroups" HorizontalAlignment="Left" Height="18" Margin="79,119,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="65" Background="#FF14142E" Foreground="White"/> 
       <Button x:Name="buttonLoad" Content="Load File" Margin="4,78,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="56" Click="Load_Clicked"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Button x:Name="buttonSplit" Content="Split" Margin="4,117,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="56" Click="Split_Clicked"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Button x:Name="buttonValidate" Content="✔" Foreground="White" Height="15" VerticalAlignment="Top" HorizontalAlignment="Right" Width="15" Click="Validate_Clicked" FontSize="10.667" RenderTransformOrigin="0.062,0" Margin="0,154,358,0" FontWeight="Bold" > 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.413"/> 
          <GradientStop Color="#FF6C6C6C" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Button x:Name="buttonPsExec" Content="PsExec" Margin="4,46,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="58" Click="Psexec_Click"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Button x:Name="buttonLoginMain" Content="Login" Margin="452,6,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="58" Click="Login_Clicked"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
      </Grid> 


     </TabItem> 

     <TabItem Header="Log" Margin="-3,7,3,-7"> 
      <Grid> 
       <Grid.Background> 
        <ImageBrush/> 
       </Grid.Background> 
       <RichTextBox x:Name="richTextBox1" Margin="0,6,0,5" Background="Black" Foreground="White" TextChanged="richTextBox1_TextChanged" IsReadOnly="True"> 
        <FlowDocument> 
         <Paragraph> 
          <Run Text="Remote Patch v2.0"/> 
         </Paragraph> 
        </FlowDocument> 
       </RichTextBox> 
      </Grid> 
     </TabItem> 
     <TabItem Header="Patch" Margin="-3,7,3,-7"> 
      <Grid Margin="0,5,0.333,-5.333"> 
       <Grid.Background> 
        <ImageBrush/> 
       </Grid.Background> 

       <Button x:Name="buttonLogin" Content="Login" Margin="0,10,1,0" Foreground="White" FontWeight="Bold" Grid.Row="2" Height="20" VerticalAlignment="Top" HorizontalAlignment="Right" Width="47" Click="Login_Clicked"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <GroupBox x:Name="groupBox" Header="Predefined Patches&#xA;" Margin="27,56,87,0" VerticalAlignment="Top" Height="55" Foreground="White"> 
        <Button x:Name="buttonPredefined" Content="Run" Margin="9,-7,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="51" Click="buttonPredefined_Click"> 
         <Button.Background> 
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
           <GradientStop Color="Black" Offset="0.27"/> 
           <GradientStop Color="#FF4F4F4F" Offset="1"/> 
          </LinearGradientBrush> 
         </Button.Background> 
        </Button> 
       </GroupBox> 
       <ComboBox x:Name="comboBox" Margin="132,81,102,0" VerticalAlignment="Top" Background="#FF0F0F59" SelectionChanged="comboBox_SelectionChanged" Foreground="Black" /> 

       <GroupBox x:Name="groupBox_Copy" Header="Batch File&#xA;" Margin="27,143,82,0" VerticalAlignment="Top" Height="55" Foreground="White"> 
        <Button x:Name="buttonBatch" Content="Run" Margin="0,40,0,-43" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="51" Click="Batch_Clicked" Visibility="Hidden"> 
         <Button.Background> 
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
           <GradientStop Color="Black" Offset="0.27"/> 
           <GradientStop Color="#FF4F4F4F" Offset="1"/> 
          </LinearGradientBrush> 
         </Button.Background> 
        </Button> 
       </GroupBox> 
       <TextBox x:Name="txtBatchFile" Height="23" Margin="127,168,102,0" TextWrapping="Wrap" VerticalAlignment="Top" Background="#FF14142E" Foreground="White"/> 
       <Button x:Name="ButtonRunBatch" Content="Run" Margin="42,168,0,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" HorizontalAlignment="Left" Width="51" Click="loopBatch_Clicked"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Button x:Name="buttonAddFile" Content="+" Margin="0,168,47,0" Foreground="White" FontWeight="Bold" Height="20" VerticalAlignment="Top" Click="Add_Clicked" HorizontalAlignment="Right" Width="30"> 
        <Button.Background> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="Black" Offset="0.27"/> 
          <GradientStop Color="#FF4F4F4F" Offset="1"/> 
         </LinearGradientBrush> 
        </Button.Background> 
       </Button> 
       <Grid HorizontalAlignment="Left" Height="35" Margin="182,198,0,0" VerticalAlignment="Top" Width="106"> 
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Height="40" Margin="25,5,-13,-10" VerticalAlignment="Top" Width="94"> 
         <TextBox x:Name="numerical" TextWrapping="Wrap" Width="34" Margin="0,10,0,9.667" Background="#FF14142E" Foreground="White" TextChanged="textBox_TextChanged"/> 
         <Button x:Name="button1" Content="-" HorizontalAlignment="Left" VerticalAlignment="Top" Width="14" Height="19" Margin="0,10,0,0" Background="#FFFFEFEF" FontSize="10.667" FontWeight="Bold" Click="button1_Click"/> 
         <Button x:Name="button" Content="+" HorizontalAlignment="Left" VerticalAlignment="Top" Width="14" Height="19" Margin="0,10,0,0" FontSize="10.667" FontWeight="Bold" Click="addNumValue"/> 
        </StackPanel> 
       </Grid> 
       <Label x:Name="label2" Content="Groups" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="209,231,0,0" Foreground="White"/> 

      </Grid> 
     </TabItem> 
    </TabControl> 

    <Button x:Name="button2" Content="-" Margin="0,2,53,10" Foreground="White" FontWeight="Bold" HorizontalAlignment="Right" Width="21" Click="Minimize_Click"> 
     <Button.Background> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="Black" Offset="0.27"/> 
       <GradientStop Color="#FF4F4F4F" Offset="1"/> 
      </LinearGradientBrush> 
     </Button.Background> 
    </Button> 
    <Button x:Name="button2_Copy" Margin="0,2,27,10" Foreground="White" HorizontalAlignment="Right" Width="21" Click="Maximize_Click"> 
     <Button.Background> 

      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="Black" Offset="0.27"/> 
       <GradientStop Color="#FF4F4F4F" Offset="1"/> 
      </LinearGradientBrush> 
     </Button.Background> 
     <Canvas> 
      <Rectangle Height="9" Width="9" Stroke="White" Canvas.Top="-2" Canvas.Left="-4"/> 
      <Rectangle Height="10" Width="10" Stroke="White" Canvas.Left="-2" Canvas.Top="-7" RenderTransformOrigin="0.5,0.5"> 
       <Rectangle.RenderTransform> 
        <TransformGroup> 
         <ScaleTransform/> 
         <SkewTransform/> 
         <RotateTransform Angle="-0.715"/> 
         <TranslateTransform/> 
        </TransformGroup> 
       </Rectangle.RenderTransform> 
      </Rectangle> 
     </Canvas> 
    </Button> 
    <Button x:Name="button2_Copy1" Content="X" Margin="0,2,0,10" Foreground="White" FontWeight="Bold" HorizontalAlignment="Right" Width="22" Click="button2_Copy1_Click"> 

     <Button.Background> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="Black" Offset="0.27"/> 
       <GradientStop Color="#FF4F4F4F" Offset="1"/> 
      </LinearGradientBrush> 
     </Button.Background> 
    </Button> 
    <Label x:Name="label" Content="Remote Patch" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Width="108" Foreground="White" FontSize="16" IsHitTestVisible="False"/> 


    <Rectangle Grid.Row="2" Height="20" VerticalAlignment="Bottom" Fill="Transparent" Margin="-1,0,0,0"/> 
    <Label x:Name="label1" Content="Authenticated" HorizontalAlignment="Left" Grid.Row="2" Width="84" RenderTransformOrigin="0.5,0.5" Foreground="White" Height="23" VerticalAlignment="Bottom"> 
     <Label.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform AngleY="-0.718"/> 
       <RotateTransform/> 
       <TranslateTransform Y="-0.294"/> 
      </TransformGroup> 
     </Label.RenderTransform> 
    </Label> 
    <Ellipse x:Name="authColor" Fill="Red" HorizontalAlignment="Left" Margin="83,0,0,4" Grid.Row="2" Stroke="Black" Width="13" Height="13" VerticalAlignment="Bottom"/> 
    <Label x:Name="labelSettings" Content="Settings" Margin="0,-1,84,0" VerticalAlignment="Top" Foreground="#FF595555" FontWeight="Bold" HorizontalAlignment="Right" Width="56" MouseLeftButtonDown="labelSettings_MouseLeftButtonDown"/> 
    <Rectangle x:Name="rectangleNotification" Fill="#FFDDFF03" Grid.Row="2" Stroke="Black" Height="25" VerticalAlignment="Bottom" Opacity="0" Margin="0,0,1,0"/> 
    <Rectangle Height="2" Margin="30,31,30,0" Stroke="#FF444444" VerticalAlignment="Top" Grid.RowSpan="2" Opacity="0.5"/> 

</Grid> 
</Window> 
+0

Это зависит от того, как вы построили свои интерфейсы. Есть определенные ловушки, о которых нужно знать ... например: размещение теней на объектах, содержащих много детей, приведет к серьезному отставанию вашего приложения.У меня были случаи, когда я делал подобные ошибки, но не замечал их, потому что я развиваюсь на довольно мощном компьютере, но, конечно, вы не можете полагаться на всех своих клиентов, чтобы иметь мощные компьютеры только для запуска вашего приложения. Не могу сказать, что вы сделали не так, не видя кода. – learningcs

+0

Так вы считаете, что это проблема XAML? Я обновлю его с помощью mainWindow – Rickybobby

+0

Спасибо !!!!!!! – Rickybobby

ответ

1

У вас есть DropShadowEffect применены к Window.

Это проблема, потому что DropShadowEffect использует все объекты-потомки для вычисления формы тени. Это означает, что каждый объект, содержащийся в вашем окне, проверяется этим эффектом при рендеринге - это занимает очень много времени.

Ваш теневой эффект имеет 0 прозрачность в любом случае, поэтому вы можете просто удалить его. Кроме того, вы должны применить эффект к дочернему элементу окна, но убедитесь, что у ребенка нет потомков.

Трюк, который я использую для применения тени к окну без разрушения производительности, заключается в том, чтобы окружить содержимое моего окна сеткой, поместить границу (или аналогичный объект) в верхней части указанной сетки (не забудьте назначить фон к границе, иначе вы не получите тени), а затем примените эффект к границе вместо вашего окна.

До:

<Window x:Class="MyProject.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="300" Width="400" 
     WindowStyle="None" AllowsTransparency="True" Background="Transparent"> 

    <Window.Effect> 
     <DropShadowEffect BlurRadius="10" ShadowDepth="0"/> 
    </Window.Effect> 

    <StackPanel Margin="8" Background="White"> 
     <Button Margin="4">Test</Button> 
     <Button Margin="4">Test</Button> 
     <Button Margin="4">Test</Button> 
    </StackPanel> 

</Window> 

После:

<Window x:Class="MyProject.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Height="300" Width="400" 
      WindowStyle="None" AllowsTransparency="True" Background="Transparent"> 

    <Grid Margin="8"> 
     <Border Background="White"> 
      <Border.Effect> 
       <DropShadowEffect BlurRadius="10" ShadowDepth="0"/> 
      </Border.Effect> 
     </Border> 
     <StackPanel> 
      <Button Margin="4">Test</Button> 
      <Button Margin="4">Test</Button> 
      <Button Margin="4">Test</Button> 
     </StackPanel> 
    </Grid> 

</Window> 

Это обеспечивает тот же внешний вид, но с более высокой производительностью, так как:

  • Кнопки больше не участвуют в расчете от теней
  • На границе есть нет потомков, так что эффект только использует макет границы в расчете

Общее эмпирическое правило ... не применяются только к эффект тени к объектам, чьи предки предназначены для пострадавших от эффекта ,

+2

Что вы за информацию и пример, это сделал трюк! – Rickybobby

+1

Рад, что это было полезно :) – learningcs

Смежные вопросы