各位,
上下文:应用程序采用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项)会增加很多,但空闲物理内存却大致保持不变。
但最终,我在寻找潜伏期增加的原因。你能提出假设,如何收集更有意义的线索,或者更好的解释吗?
提前感谢!
1条答案
按热度按时间5anewei61#
尝试:(也许优化你的应用程序在下一次加载)-第一次后
您也可以将其应用于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.用using语句将对话框括起来。确保文件流已处置(using语句)。确保处置所有正在处置的内容,确保在窗体(主窗体)中不再使用它。
1.你可以在DevExpress中强制DirectX。也许它会很友好...
1.如果以上都不起作用,请将支持票发送给DevExpress团队,并将您的项目上传给他们。