当前位置: 首页 > 编程语言 > C#

长时间运行的应用程序变慢分享

时间:2023-04-10 21:44:28 C#

长期运行的应用程序变慢有一个应用程序由三个可执行文件组成。其中之一-调度程序,运行其他可执行文件。调度程序在完成时从可执行文件接收代码。也就是说,只有调度程序一直在运行,其他可执行文件被卸载并再次加载。该应用程序在服务点运行,全天候24/7工作。首次启动时,应用程序运行很快。在一天结束时,应用程序运行非常缓慢。这种行为的原因可能是什么?随着时间的推移,速度放缓的原因可能有很多。从缓慢的内存泄漏到防病毒软件的任何地方。您能做的最好的事情就是尝试建立证据(数据)来说明首先要查看应用程序的哪些区域。尽量不要和很多开发人员交谈,因为每个人对可能出现的问题会有不同的想法。检索数据!如何获取数据:perfmonperfmon是你的朋友。您可以查看许多计数器(系统范围的以及特定于进程的)。所以你可以从分析四大(内存、磁盘使用、cpu和网络)开始。有很多关于哪些计数器最好的帖子,所以我不会在这里详细介绍性能计数器。windbg如果您确实看到内存在增长并且没有被收集,那么是时候引入大炮了。.NET非常适合从开发人员那里抽象内存使用情况,但这意味着我们必须在.NET下找到不允许垃圾收集器完成其工作的东西。带有sos.dll(托管扩展)的windbg是一个很棒的工具。windbg中最难的部分(以我的经验)就是正确加载sos扩展。您必须密切注意正在分析的目标体系结构(64或32)以及正在运行的CLR版本。来自sysinternals的procdumpprocdump是一个很好的小工具,用于从正在运行的进程中获取内存快照。然后windbg可以分析这些快照(.dmp文件)。sossos.dll自v2以来随.NETFramework一起提供。在v4中,VisualStudio2010集成了sos并允许您分析.dmp文件!我发现的最有用的内存泄漏sos命令是:!eeheap-gc(每个堆的每一代中的内容概述)!dumpheap-min(转储指定以上的所有对象和类型)!dumpheap类型(转储特定的所有对象)!gcroot(打印出一个堆栈,这样你就可以看到父级在GC中固定了什么)!做(打印出特定对象的内存)其他一些指针:通常您希望在负载下对内存进行快照,因此最好有一些在系统外模拟内存的方法。所以最好提前运行它,甚至将它用于应用程序的QA过程。对于性能问题,通常最好使用正在运行的应用程序随时间定期拍摄快照。然后您可以在分析时比较快照。好吧,它比我想要的要长一点,但希望值得!您必须检查调度程序应用程序的内存使用情况……您似乎没有处理未使用的对象。以上就是C#学习教程:长时间运行的应用变慢的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: