代码之家  ›  专栏  ›  技术社区  ›  devios1

绕过WPF呈现瓶颈

  •  3
  • devios1  · 技术社区  · 15 年前

    我喜欢制作高效的应用程序,经常使用并发和多线程来提高应用程序的响应性等等,但最近我的尝试似乎总是被WPF的单线程性所阻碍。无论我的代码有多高效和并行,WPF似乎总是让我的UI停下来,让我的应用看起来异常的无响应——有时候等待一个窗口呈现可能需要宝贵的几秒钟(即使是鼠标光标也不会移动)。我觉得这很令人沮丧,因为似乎我没办法加快速度。

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

    为了说明我的问题:我有一个作为搜索框的文本框,我希望结果在用户类型中动态显示(每个结果都封装在一个UserControl中并显示在ItemsControl中)。我正在使用后台线程执行搜索。问题是,当WPF呈现搜索结果时,会完全停止UI,这样在WPF大量出现时,每次输入都会冻结几秒钟,使整个“键入时的结果”的事情变得不太可行。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Paul Sasik    15 年前

    考虑到您已经在使用线程来获取数据,我只能推测返回的数据集足够大,足以导致速度减慢。(你能提供一些指标吗?)例如,您可能有一个线程获取一个名称数组,但是如果结果是多个,数千个,那么绑定时肯定会有性能问题。