简体   繁体   English

C#WPF应用程序UI在其他计算机上真的很慢

[英]c# WPF application UI really slow on other computers

I don't know how vague this may sound, so if you require more information, please let me know! 我不知道这听起来有多模糊,所以如果您需要更多信息,请告诉我!

I've finished my program, and I've attempted to try running it on other machines, I have not used any installers to deploy this, I just have been using the debug/release programName.exe after compiling it. 我已经完成程序,并且尝试在其他计算机上运行该程序,但尚未使用任何安装程序进行部署,只是在编译后使用了debug / release programName.exe。

My question is that is there reason why my program is running incredibly slow when it's not running on the system it was compiled on? 我的问题是,当程序不在编译时所在的系统上运行时,为什么我的程序运行异常缓慢是有原因的吗? the entire UI lags, as in it takes several sections just to switch to another tab, while running on its native computer, it runs perfectly smooth. 整个用户界面滞后,因为它需要几个部分才能切换到另一个选项卡,而在其本机计算机上运行时,它运行得非常流畅。

I've tried the publish wizard, so I don't think that'll help. 我已经尝试过发布向导,所以我认为这不会有所帮助。 I was wondering if it has to do with any the my xaml, the DLLs, or the program's dependencies? 我想知道是否与我的xaml,DLL或程序的依赖项有关? At the moment, I don't have any sort of pictures or resources that it's relying on. 目前,我没有任何图片或资源。

Any advice on any changes that I can make to get this running more smoothly would be greatly appreciated. 我将为使此操作更平稳地进行任何更改提供任何建议,将不胜感激。

Here's my mainWindow Xaml: 这是我的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>

You have a DropShadowEffect applied to your Window . 您已将DropShadowEffect应用于Window

This is a problem because the DropShadowEffect uses all descendant objects to calculate the shape of the shadow. 这是一个问题,因为DropShadowEffect使用所有后代对象来计算阴影的形状。 That means every single object contained in your Window is being inspected by this effect while rendering -- this takes a really long time. 这意味着在渲染时,此效果将检查Window中包含的每个对象-这确实需要很长时间。

Your shadow effect has 0 opacity anyway so you could just remove it. 阴影效果的不透明度为0,因此可以将其删除。 Alternatively, you should apply the effect to a child of the Window, but make sure that child has no descendants. 或者,应将效果应用于“窗口”的子级,但要确​​保该子级没有后代。

The trick I use to apply the shadow to a window without destroying performance is to surround the contents of my window in a grid, place a border (or similar object) at the top of said grid (remember to assign a background to the border otherwise you won't get a shadow) and then apply the effect to the border instead of your window. 我在不影响性能的情况下将阴影应用于窗口的技巧是将窗口的内容围绕在网格中,在该网格的顶部放置边框(或类似对象)(切记为边框分配背景)您将不会得到阴影),然后将效果应用于边框而不是窗口。

Before: 之前:

<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>

After: 后:

<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>

This provides the exact same appearance, but with better performance because: 这提供了完全相同的外观,但是具有更好的性能,因为:

  • The buttons are no longer involved in the calculation of the shadow 按钮不再参与阴影的计算
  • The border has no descendants, so the effect is only using the layout of the border in the calculation 边框没有后代,因此效果仅在计算中使用边框的布局

General rule of thumb... Only apply the drop shadow effect to objects whose ancestors are intended to be affected by the effect . 一般经验法则... 仅将投影效果应用于其祖先将要受到效果影响的对象

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM