在wpf中重复打开一个对话框时需要关注性能

我有一个启动对话框按钮,它创建一个窗口的视图模型并将其绑定到窗口(它启用了UI虚拟化)。 首次点击只需1秒即可启动对话框。 但是,如果我非常频繁地或背对背地打开同一个对话框,它将开始花更多时间为下一次迭代填充网格数据源。 如果我暂停一下,然后再打开窗口,那么只需要大约1或2秒。

for first time populating the item source it take only 1 second:
next time populating the item source it takes  2 second
next time populating the item source it takes  3 second
next time populating the item source it takes  6 second
next time populating the item source it takes  8 second

但是,如果我调用不推荐的GC.Collect(),那么填充网格数据源总是需要大约1秒。 但要求

Gc.Collect()
Gc.WaitForPendingFinalizer()
Gc.Collect()

每次迭代花费我一些时间。

我知道调用GC.Collect不是一个好的选择。 任何人都可以建议我怎样才能提高我的应用程序性能。

我更关心用户机器,因为我的机器配置非常好,而用户机器可能不那么快。


如果不查看代码,就很难找出确切的问题。 但是,通常这可能由于几个原因而发生。

  • 它加载更多的数据(可能是双倍?)加时。 你已经指出它每次只加载200条记录。 但请确保您的逻辑正确并在重新发布之前清除以前的数据。

  • 确保您取消订阅任何事件订阅。 有时可能会有触发以前网格实例的隐藏事件。 你可以通过在一个偶数句柄上休息并检查它是否触发不止一次来轻松检查。

  • 看看你正在创建的每个Disposable实例,并检查是否适当地处理它们。 可能你没有处理一次性实例,这可能是GC.Collect帮助的原因。

  • 我不太确定虚拟化的参与。 在没有虚拟化的情况下执行相同的测试,以确保这不是原因。

  • 链接地址: http://www.djcxy.com/p/31927.html

    上一篇: Performance concern while opening a dialog repetitively in wpf

    下一篇: How do I combine these two queries to calculate rank change?