Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实例化特定用户控件时,性能显著下降_C#_Wpf_User Controls_Datacontext - Fatal编程技术网

C# 实例化特定用户控件时,性能显著下降

C# 实例化特定用户控件时,性能显著下降,c#,wpf,user-controls,datacontext,C#,Wpf,User Controls,Datacontext,我正在从两个地方开发一个WPF应用程序,一个在windows 10上有一台健壮的PC,另一个有一台更旧的PC,硬件更差,运行windows 7 在windows 10 PC上,我从未注意到问题,这仅在windows 7计算机上重现 在我的窗口中,有一个ContentControl,它绑定到窗口的viewmodel中的UserControl属性 我可以在那里显示不同的用户控件,大多数都表现良好。然而,我有2个,当我尝试加载它们时,它们实际上需要3-5秒,在此期间UI线程挂起 它们在xaml中没有太

我正在从两个地方开发一个WPF应用程序,一个在windows 10上有一台健壮的PC,另一个有一台更旧的PC,硬件更差,运行windows 7

在windows 10 PC上,我从未注意到问题,这仅在windows 7计算机上重现

在我的窗口中,有一个ContentControl,它绑定到窗口的viewmodel中的UserControl属性

我可以在那里显示不同的用户控件,大多数都表现良好。然而,我有2个,当我尝试加载它们时,它们实际上需要3-5秒,在此期间UI线程挂起

它们在xaml中没有太多内容,我在其他控件的xaml中有更复杂的内容,所以我认为问题不在这里

这两个控件所做的一件事是不同的,没有此问题的其他控件所做的一件事是在.xaml.cs文件中usercontrol的构造函数中,它们设置了自己的datacontext

InitializeComponent();
DataContext = new CreateGroupPanelViewModel();
viewmodel的构造函数只是将一些属性设置为值。主要是一些字符串到字符串。Empty,实例化2个ObservableCollections,将bool设置为true,并将字符串设置为“创建游戏”

第一次打开此控件时,我遇到了问题,但第二次它根本不会造成延迟。另外,如果我运行程序一分钟左右,然后第一次尝试打开它,也可以

我无法理解为什么实例化这个usercontrol会造成如此巨大的性能损失,或者为什么它在两台不同的机器上的行为会如此不同

编辑 减速发生在InitializeComponent()中;用户控件的

以下是此类控件的XAML:

<UserControl x:Class="CasinoDB.UserControls.ModifyPanels.UCModifyGamePanel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:CasinoDB.UserControls.ModifyPanels"
             xmlns:vm="clr-namespace:CasinoDB.ViewModels"
             mc:Ignorable="d"
             d:DesignHeight="500" d:DesignWidth="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding Header}" HorizontalAlignment="Center" Margin="5" FontWeight="Bold" FontSize="20" />

        <StackPanel Grid.Row="1" HorizontalAlignment="Center">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Name:" Margin="5" />
                <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="150" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="RTP:" Margin="5" />
                <TextBox Text="{Binding RTP, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="50" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Variance:" Margin="5" />
                <TextBox Text="{Binding Variance, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="150" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Lines:" Margin="5" />
                <TextBox Text="{Binding Lines, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="100" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Min Bet:" Margin="5" />
                <TextBox Text="{Binding MinBet, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="50" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Max Win:" Margin="5" />
                <TextBox Text="{Binding MaxWin, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="75" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Vendor:" Margin="5" />
                <TextBox Text="{Binding Vendor, UpdateSourceTrigger=PropertyChanged}" Margin="5" MinWidth="150" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <TextBlock Text="Notes:" Margin="5" />
                <TextBox Text="{Binding Notes}" Margin="5" Width="250" TextWrapping="Wrap" AcceptsReturn="True" AcceptsTab="True" SpellCheck.IsEnabled="True" Height="75" VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" />
            </StackPanel>
            <CheckBox Content="Create Another" IsChecked="{Binding CreateAnother}" Margin="5" Visibility="{Binding ShowCreateAnother, Converter={StaticResource BooleanToVisibilityConverter}}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" />
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5">
                <Button Content="SAVE" Command="{Binding Save}" Margin="5" Style="{StaticResource ConfirmButton}" />
                <Button Content="CLOSE" Command="{Binding Close}" Margin="5" />
            </StackPanel>
        </StackPanel>
    </Grid>
</UserControl>

好的,在尝试隔离问题之后,我终于找到了问题所在。它位于文本框上的拼写检查中。我发现这一点是通过注释掉大的部分,测试性能,然后取消注释少量内容,直到它在机器上动作缓慢

在找出原因后,我在SO上找到了一篇类似的帖子,里面有一个注册表条目的相关信息,里面充斥着词汇表。我在注册表中的那个位置似乎没有条目,所以可能我的问题与此类似,但它正在查找,根本找不到任何东西


不管怎样,我可以不用拼写检查就活下去,我会把它去掉的

你在做任何绑定吗?跟踪你的ViewModel构造函数,可能是有什么东西被延迟加载并阻塞了你的UI线程!很抱歉耽搁您的时间-您今天才离开受影响的机器。性能下降来自
InitializeComponent()在用户控件构造函数中-VM构造函数几乎是即时的。是的,UC中有绑定,但不太多,也不太复杂(例如没有使用转换器)。InitializeComponent()是加载XAML并在运行时创建所有控件的工具。您是否在XAML中执行某些必须分配任何主要资源的操作,或者尝试访问网络上的某些内容?你能给我们看看你正在使用的XAML吗?@JeffR。我编辑了原始帖子,加入了导致速度减慢的一个用户控件的XAML。除了到VM的绑定之外,唯一引用的其他东西是ConfirmButton的静态资源和converter BooleanToVisibilityConverter,这两个我在其他控件中都使用,没有问题