实例化特定用户控件时性能显着下降
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实例化特定用户控件时性能显着下降相关的知识,希望对你有一定的参考价值。
我正在从2个位置开发一个WPF应用程序,一个在Windows 10上有一个强大的PC,另一个有更旧的PC,硬件更差,运行Windows 7。
在Windows 10 PC上,我从未注意到有问题,这只能在Windows 7机器上重现。
在我的Window中,我有一个ContentControl,它绑定到窗口viewmodel中的UserControl属性。
我可以在那里显示不同的用户控件,并且大多数都表现得很好。然而,我有2个,当我尝试加载它们时,它们需要3-5秒,在此期间UI线程挂起。
他们在xaml中没有太多进展,我在其他控件中的xaml中有更复杂的东西,所以我不认为问题就在那里。
这两个控件做的不同之处是,没有这个问题的其他控件没有做的是在.xaml.cs文件中的usercontrol的构造函数中,他们设置了他们的datacontext。
InitializeComponent();
DataContext = new CreateGroupPanelViewModel();
viewmodel的构造函数,只是将一些属性设置为值。主要是字符串到string.Empty,实例化2 ObservableCollection,将bool设置为true并将字符串设置为“Create Game”。
我第一次打开这个控件,我遇到了问题,但第二次它没有任何延迟。此外,如果我运行该程序一分钟左右,然后尝试第一次打开它也没关系。
我无法理解为什么实例化这个用户控件会产生如此巨大的性能损失,或者为什么它会在2台不同的机器上表现得如此不同。
编辑减速发生在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>
好的,所以在试图找出问题之后,我终于找到了我的问题。它位于TextBoxes上的SpellCheck.IsEnabled="True"
中。我发现这一点是通过评论大部分,测试性能,然后取消注释少量,直到它在机器上行动缓慢,它行动缓慢。
在确定这是原因之后,我在SO上发现了一个类似的帖子,其中包含有关注册表项填充字典的信息。我似乎没有在注册表中的该位置有一个条目,所以也许我的问题类似,但它看起来,根本找不到任何东西。
无论如何,我可以在这些领域没有拼写检查,我会删除它。
以上是关于实例化特定用户控件时性能显着下降的主要内容,如果未能解决你的问题,请参考以下文章
使用标头而不是 Cookie 定位特定的 Azure Web 应用实例
如何在不使用数据库的情况下重新实例化动态 ASP.NET 用户控件?