gpt4 book ai didi

WPF 性能加载用户控件

转载 作者:行者123 更新时间:2023-12-04 20:38:00 28 4
gpt4 key购买 nike

我正在开发一个带有选项卡式 MDI 界面的 WPF 应用程序。基本上,用户单击一个菜单项,这将创建并添加一个新选项卡。创建一个新的“MyUserControl”并将其设置为选项卡的内容。像这样的东西:

    private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
this.TabControl.Items.Add(new TabItem() { Content = new MyUserControl() });
}

MyUserControl 由几个嵌套控件(大约 8 个控件)组成。当这种方法连接到实际控制时,性能是 Not Acceptable 。

除非我失去理智,否则我注意到提前在 xaml 中声明选项卡和内容并简单地切换选项卡项的 Visibility 属性时,对性能的影响似乎要小得多:
    <Controls:TabControl x:Name="TabControl" Grid.Row="1">
<Controls:TabControl.Items>
<Controls:TabItem x:Name="MyTabItem" Visibility="Collapsed">
<Controls:MyUserControl x:Name="MyUserControl" />
</Controls:TabItem>
</Controls:TabControl.Items>
</Controls:TabControl>


    private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
this.MyTabItem.Visibility = Visibility.Visible;
}

谁能解释一下?在 xaml 中而不是以编程方式构建“视觉树”真的更有效吗?或者我的第二种方法中的性能影响只是被移到了整个表单的加载中,而不是像第一种方法中那样单击菜单项时?

第二种方法肯定似乎表现得更好。有什么想法吗?

最佳答案

将其声明为 xaml 并没有效率更高。我认为您认为性能影响已转移到表单加载是正确的。

如果加载时间过长,则可能是它在其构造函数中做了太多工作。看看是否可以最小化加载控件期间所做的工作。

否则,如果问题只是用户控件中的控件数量过多,也许您可​​以将一个完全加载的选项卡保留在内存中,直到它准备好使用为止。一旦用户单击菜单项,将其添加到选项卡控件,然后开始在后台线程中加载一个新选项。

关于WPF 性能加载用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687501/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com