c#WPF应用程序UI在其他计算机上确实很慢

本文关键字:计算机 应用程序 UI 其他 c#WPF | 更新日期: 2023-09-27 18:22:29

我不知道这听起来有多模糊,所以如果您需要更多信息,请告诉我!

我已经完成了我的程序,并尝试在其他机器上运行它,我没有使用任何安装程序来部署它,我只是在编译后使用调试/发布程序Name.exe。

我的问题是,当我的程序不是在编译它的系统上运行时,它运行得非常慢,这是有原因的吗?整个UI滞后,因为它只需要几个部分就可以切换到另一个选项卡,而在其本地计算机上运行时,它运行得非常平稳。

我已经尝试过发布向导,所以我认为这没有帮助。我想知道它是否和我的xaml、DLL或程序的依赖关系有关?目前,我没有它所依赖的任何图片或资源。

如果我能为使这项工作更顺利地进行而做出任何改变,我将不胜感激。

这是我的主窗口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>

c#WPF应用程序UI在其他计算机上确实很慢

您的Window应用了DropShadowEffect

这是一个问题,因为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>

这提供了完全相同的外观,但具有更好的性能,因为:

  • 按钮不再参与阴影的计算
  • 边框没有子体,因此效果仅为在计算中使用边框的布局

一般经验法则仅将阴影效果应用于其祖先将受该效果影响的对象

相关文章: