解决WPF渲染瓶颈问题

时间:2010-08-18 00:15:24

标签: .net wpf performance optimization

我喜欢制作高效的应用程序,并且经常寻求并发和多线程来提高应用程序响应能力等等,但最近我的尝试似乎总是被WPF的单线程阻塞。无论我的代码有多么高效和并行,WPF似乎不断地停止我的UI并使我的应用程序看起来令人难以置信的反应 - 有时等待渲染的窗口可能需要宝贵的秒数(即使鼠标光标也不会移动)。我发现这令人沮丧,因为似乎我无法做任何事情来加快速度。

我的问题是 我可以做些什么来提高我的WPF应用程序的响应能力?我的窗口风格和构图往往相当复杂,我已经在使用虚拟化StackPanels。

为了说明我的问题:我有一个充当搜索框的文本框,我希望在用户输入时动态显示结果(每个结果都封装在UserControl中并显示在ItemsControl中)。我正在使用后台线程来执行搜索。问题是,当WPF呈现完全停止UI的搜索结果时,WPF会一次性地冻结输入几秒钟,使整个“输入结果”的东西不太可行。

有什么方法可以避免在WPF渲染时让UI线程停止吗?

1 个答案:

答案 0 :(得分:1)

鉴于您已经在使用线程获取数据,我只能猜测返回的数据集足够大,导致速度减慢。 (你能在那里提供一些指标吗?)例如,你可能有一个线程获取一个名字数组但是如果结果是数千,那么当你绑定时肯定会有性能损失。

我能想到的唯一策略是缩小从你的线程返回的结果(如果你正在使用Sql Server,则使用TOP sql子句),或者,如果你真的需要显示所有返回的数据,将流分解为块,以便UI不必一次呈现尽可能多的数据。后一种选择相当复杂,可能需要从头开始创建或至少覆盖UI控件。