gpt4 book ai didi

wpf - 使用数据绑定(bind) WPF ComboBox 诊断性能问题

转载 作者:行者123 更新时间:2023-12-02 01:24:32 25 4
gpt4 key购买 nike

今天早上我一直在与“缓慢”的 WPF ComboBox 作斗争,很想看看是否有人有调试此类问题的技巧。

假设我有两个组合框,A 和 B。当 A 更改时,B 中的项目也会更改。每个 ComboBox 都有其 SelectedItem 和 ItemsSource 数据绑定(bind),如下所示:

<ComboBox Grid.Column="1" ItemsSource="{Binding Names}" SelectedItem="{Binding CurrentName, Mode=TwoWay}" Margin="3" MinWidth="100" />
<ComboBox Grid.Column="1" Grid.Row="1" ItemsSource="{Binding SubNames}" SelectedItem="{Binding CurrentSubName, Mode=TwoWay}" Margin="3" MinWidth="100" />

每当 B 中的列表需要更改时,我都会通过清除 SubNames 然后根据 A 中的 SelectedItem 重新添加条目来执行此操作。这样做是因为用新的 ObservableCollection<string> 覆盖 SubNames。破坏数据绑定(bind)。

一台计算机上的一切都按照您的预期运行。选择A,然后单击B,新项目立即弹出。在另一台计算机上,当我执行此操作时,在呈现 ComboBox 之前会出现长达 5 秒 的暂停。元素数量完全相同。一个区别是,在慢速机器上,硬件通信在后台进行。我卡住了所有这些线程,但没有帮助。

我最大的问题是我不知道从哪里开始寻找。我需要查看单击组合框时系统正在做什么。我正在使用数据绑定(bind),因此无法在任何地方放置断点。我确实尝试更改我的子名称声明

public ObservableCollection<string> SubNames { get; set; }

private ObservableCollection<string> subnames_ = new ObservableCollection<string>();
public ObservableCollection<string> SubNames
{
get { return subnames_; }
set { subnames_ = value; }
}

然后在 getter 和 setter 中设置断点,看看是否有过多的读取或写入,但没有。

任何人都可以建议我下一步尝试确定这种放缓的根源吗?我不认为它与 ComboBox 库存模板有任何关系,如所述 in this article .

最佳答案

虽然这可能无法直接回答您的问题,但一个建议是不要直接绑定(bind)到 ObservableCollection。由于集合在操作其内容时可能引发大量事件,因此最好将 ItemsControl 绑定(bind)到表示该 ObservableCollection 的 ICollectionView,并在更新集合时使用 ICollectionView.DeferRefresh()

我通常做的是创建一个从 ObservableCollection 派生的类,该类公开一个 DefaultView 属性,该属性延迟实例化与集合对应的 ICollectionView。然后,我将所有 ItemsControl 绑定(bind)到 collection.DefaultView 属性。然后,当我需要刷新或以其他方式操作集合中的项目时,我使用:

using (collection.DefaultView.DeferRefresh()) {
collection. // add/remove/replace/clear etc
}

仅在释放由 DeferRefresh() 返回的对象后才会刷新绑定(bind)控件。

另请注意,WPF 中的绑定(bind)机制有一个默认的 TraceSource,您可以使用它来收集有关绑定(bind)本身的更多信息;它不跟踪时间,所以我不确定它有多大用,但您可以通过以下方式激活它:

System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = System.Diagnostics.SourceLevels.Verbose;

(或您喜欢的任何其他级别)。

关于wpf - 使用数据绑定(bind) WPF ComboBox 诊断性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760416/

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