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

前端之家收集整理的这篇文章主要介绍了c# – 在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条记录.但请确保您的逻辑正确并在重新发布之前清除以前的数据.>确保您取消订阅任何活动订阅.有时可能会触发以前网格实例的hiden事件.您可以通过在偶数句柄上放置一个中断并检查它是否多次触发来轻松检查.>查看您正在创建的每个Disposable实例,并检查是否正确处理它们.可能你没有处理一次性实例,这可能是GC.Collect帮助的原因.>我对这里的虚拟化参与不太确定.在没有虚拟化的情况下执行相同的测试,以确保不是原因.

原文链接:https://www.f2er.com/csharp/100240.html

猜你在找的C#相关文章