今天早上我一直在和一个“慢”的WPF组合框作战,并且很想看看有没有人有调试这样的问题的提示。使用数据绑定诊断性能问题WPF组合框
比方说,我有两个组合框,A和B.当A改变时,B中的项目也改变。该组合框都有各自的SelectedItem和数据绑定的ItemsSource像这样:
<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中的列表需要改变,我通过清除子名做到这一点,然后重新添加基础上,在的SelectedItem A.这是项因为用新的ObservableCollection<string>
覆盖子名称会破坏数据绑定。
一台计算机上的所有内容都按照您的预期运行。选择A,然后单击B并立即弹出新项目。在另一台计算机上,当我执行此操作时,在渲染ComboBox之前暂停多达012秒。项目数量完全相同。一个不同之处在于,在慢速的机器上,有硬件通信的背景。我冻结了所有这些线程,并没有帮助。
我最大的问题是,我无法弄清楚哪里可以开始寻找。我需要在点击ComboBox的时候看看系统在做什么。我正在使用数据绑定,所以我不能在任何地方放置断点。我曾尝试我的子名的声明从
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断点来看看是否有过多的读或写事,但有WASN”任何。
任何人都可以建议下一步为我尝试确定这种放缓的来源吗?我不相信它与ComboBox股票模板有任何关系,如in this article所述。
当您在调试会话之外运行时,您是否仍然可以检查它? – ArielBH 2011-06-01 17:06:13
我忘了所有关于这个问题!我在某处发现了一个帖子,提示它只发生在调试器内部,果然,情况就是如此。但是我已经改变了代码以使用ICollectionView来处理所有事情,而且我认为现在甚至在调试器内部都很快。 – Dave 2011-06-01 17:51:29
您节省了我几个小时的调试时间。我使用CollectionViewSource(和列表),并在调试需要3-4秒。在设置ItemsSource之后打开一个ComboBox,但在调试器之外它运行得更快。感谢您指出了这一点。 –
surfen
2012-03-18 11:53:04