gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:33:14 26 4
gpt4 key购买 nike

我有一个启动对话框按钮,它创建一个窗口的 View 模型并将其绑定(bind)到该窗口(它启用了 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 不是一个好的选择。任何人都可以建议我如何提高我的应用程序性能。

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

最佳答案

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

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

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

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

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

关于c# - 在 wpf 中重复打开对话框时的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com