winforms 在Windows 10上运行的GUI应用程序中,处理用户事件的延迟会随着时间的推移而增加

6fe3ivhb  于 2022-11-17  发布在  Windows
关注(0)|答案(1)|浏览(148)

各位,
上下文:应用程序采用C#编码,GUI控件来自WinForms和DevExpress,运行于Windows 10、64位、32 GB内存、Intel i7。
当我运行我的应用程序大约8个小时时,它在用户事件方面的延迟变慢了。我注意到:
1-GDI对象的数量几乎保持不变(从202减少到196)2-USER对象的数量增加了10倍(从400增加到4000)3-我的计算机上的可用物理内存没有太大变化(从16.3减少到16.1 GB)。
当应用程序运行时,其他应用程序打开,但我不使用它们/与它们交互。
我不明白为什么USER对象的数量(第2项)会增加很多,但空闲物理内存却大致保持不变。
但最终,我在寻找潜伏期增加的原因。你能提出假设,如何收集更有意义的线索,或者更好的解释吗?
提前感谢!

5anewei6

5anewei61#

尝试:(也许优化你的应用程序在下一次加载)-第一次后

ProfileOptimization.SetProfileRoot(@"C:MyAppFolder");
        ProfileOptimization.StartProfile("Startup.Profile");

您也可以将其应用于WinForms:-

1.如果您有lambda表达式事件。请尝试使用本地函数执行此操作,并在Dispose Form. button1.Click += lamda method; button1.Click -= lamda method之前再次取消订阅事件
1.当打开对话框时,使用将它们括起来。(在WinForms中,对话框从不释放),直到您手动释放它们。using(MyForm frm = new MyForm()) frm.ShowDialog();
1.尝试清除Visual Studio缓存和WinForms designer cache
1.重置Visual Studio设置工具-〉导入和导出设置:是的。
1.清理你的temp和%temp%(有时nuget包使用%temp%并缓存在那里)。也可以通过运行-〉预取来清理预取文件夹。
1.也许重新安装DevExpress组件?为什么不呢?
1.也许重新安装Visual Studio本身?为什么不呢?
1.请确定您通常是在出版模式中部署,而不使用PDB档案。两柴模式通常会很繁重,因为它包含pdb,可两柴的项目。
1.如果上述方法都不适用,请销毁您的PC;)
编辑:我认为100%你的项目中有内存泄漏!有些资源没有被处理,可能你定义了一些带有GUI的静态类。或者你没有Close()一些窗体或者没有取消订阅它们的事件,导致GC没有处理它们。

最后的想法:

1.也许每1小时使用GC.Collect()......作为瓶颈,直到您找到发生泄漏的位置。

  1. WinForms本身泄漏当你运行应用程序很长一段时间!这可能是它的行为。但你至少可以使泄漏非常缓慢。或可以使它非常快!。你可以重新启动您的应用程序时(最终用户)在空闲模式。(如果他没有打开任何屏幕,表单等)。重新启动他的应用程序自动,并给予他相同的权限和配置,他是在它。
    1.用using语句将对话框括起来。确保文件流已处置(using语句)。确保处置所有正在处置的内容,确保在窗体(主窗体)中不再使用它。
    1.你可以在DevExpress中强制DirectX。也许它会很友好...
    1.如果以上都不起作用,请将支持票发送给DevExpress团队,并将您的项目上传给他们。

相关问题