如何优化IntializeComponent()

问题描述 投票:0回答:1

我有一个 wpf 窗口,其中有 ScrollViewer 和 TextBlock,当用户打开此窗口时,我们从服务器获取 1000 个 AT 对象,并将其添加到滚动查看器中的该窗口上。当在滚动查看器中单击特定项目时,其相应的信息将填充在文本块猫科动物上。 scrollviewer 由多个 Mylistboxentry 实例组成

问题是在早期版本中,向 WPF 窗口添加 1000 个 AT 对象的操作需要大约 3-4 秒。 现在它花费了太多时间〜10秒。

进一步挖掘,此延迟来自 public myListBoxEntry(object details, string Text, string descriText, bool invalid, bool selected) 的构造函数的 InitializeComponent()

随着要添加的 listboxentry 对象数量的增加,总延迟也会增加,每个实例 intializecomponent() 需要 7-8 毫秒..

如何优化? 它在旧版本中运行得更快的原因可能是什么?

无法尝试多线程,因为这是向 UI 操作添加组件,而主线程只能执行此操作

c# optimization listbox initialization wpf-controls
1个回答
0
投票

一个典型的解决方案是使用“虚拟化”,这只会在实际需要时创建昂贵的 WPF 对象。由于您很可能不会一次看到所有 1000 个项目,这可能是一个重大的性能优势。

您可能需要稍微重写您的控件才能使用它。 ListView/ListBox 默认情况下应启用虚拟化。如果您正在执行自定义操作,则可能需要从 ItemsControl 派生并使用虚拟化设置为 true 的 VirtualizingStackPanel 作为 ItemsPanel。

了解更多信息优化性能:控制

© www.soinside.com 2019 - 2024. All rights reserved.