在 wpf 中重复打开对话框时的性能问题

Performance concern while opening a dialog repetitively in wpf

我有一个启动对话框按钮,它创建一个 window 的视图模型并将其绑定到 window(它启用了 UI 虚拟化)。第一次点击启动对话框仅需 1 秒。但是,如果我非常频繁地或背靠背地打开同一个对话框,它就会开始花费更多时间来为下一次迭代填充网格数据源。如果我稍等片刻,然后再次打开 window,则只需要大约 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 不是一个好选择。谁能建议我如何提高我的应用程序性能。

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

如果不查看代码,很难查明确切的问题。但是,通常这可能由于一些原因而发生。

  1. 它每次加载更多数据(可能是两倍?)。你已经指出它每次只加载 200 条记录。但要确保你的逻辑是正确的,并且在你重新发布之前它会清除以前的数据。

  2. 确保取消订阅任何活动。有时可能会触发先前网格实例的隐藏事件。您可以通过在偶数句柄上打断并检查它是否触发多次来轻松检查。

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

  4. 我不太确定这里涉及虚拟化。在没有虚拟化的情况下执行相同的测试以确保这不是原因。