我正在处理内存泄漏问题。在大型代码库中的某个地方,有一些非托管资源(可能是网络连接)没有足够快地进行垃圾收集。由于大量的OS句柄/ svchost.exe线程,我的系统最终耗尽内存。它只是一个特别是svchost.exe进程不断增长。所以我试图瞄准最大的svchost.exe线程并强行终止它。我能够这样做,它可以正常工作一段时间,但我注意到有时网络连接会下降。我认为这是因为当应用程序运行时,它正在向svchost.exe添加线程,但其他一些后台进程也是如此。最终,有问题的svchost.exe进程可能包含其他应用程序的线程,可能包括操作系统网络功能,并且杀死它也会杀死这些线程。
有没有办法在我选择要杀死的svchost.exe进程后限制我杀死的线程?我最好的选择是调试整个代码库,并希望找到发生内存泄漏的地方?我的经理关于在哪里看的建议没有发现任何真实的信息,我之前的工程师都没有能够通过监控工具弄清楚,所以我想知道是不是时候坐下调试器了周末几个小时。
我目前正在尝试让垃圾收集器强制收集所有第1代对象,但它没有帮助计算线程数。有争议的svchost.exe缓慢但肯定会增加线程数和句柄数。