使用C#杀死svchost.exe进程中的一些线程,但不是它的所有线程

使用C#杀死svchost.exe进程中的一些线程,但不是它的所有线程,c#,memory-leaks,garbage-collection,unmanaged,managed,C#,Memory Leaks,Garbage Collection,Unmanaged,Managed,我正在处理一个内存泄漏的问题。在大型代码库的某个地方,一些非托管资源(可能是网络连接)的垃圾收集速度不够快。由于操作系统句柄/svchost.exe线程数量巨大,我的系统最终会耗尽内存。只有一个svchost.exe进程在不断增长。因此,我尝试以最大的svchost.exe线程为目标,并强制杀死它。我可以这样做,并且在一段时间内工作正常,但我注意到有时网络连接会下降。我认为这是因为当应用程序运行时,它正在向svchost.exe添加线程,但其他一些后台进程也是如此。最终,讨论中的svchost.

我正在处理一个内存泄漏的问题。在大型代码库的某个地方,一些非托管资源(可能是网络连接)的垃圾收集速度不够快。由于操作系统句柄/svchost.exe线程数量巨大,我的系统最终会耗尽内存。只有一个svchost.exe进程在不断增长。因此,我尝试以最大的svchost.exe线程为目标,并强制杀死它。我可以这样做,并且在一段时间内工作正常,但我注意到有时网络连接会下降。我认为这是因为当应用程序运行时,它正在向svchost.exe添加线程,但其他一些后台进程也是如此。最终,讨论中的svchost.exe进程可能包括其他应用程序的线程,可能是操作系统网络功能的线程,杀死它也会杀死这些线程

在选择要终止的svchost.exe进程后,是否有方法限制终止的线程?我的最佳选择是调试整个代码库并希望找到内存泄漏发生的位置吗?我的经理关于在哪里查找的建议没有显示出任何真实的信息,在我之前的工程师也没有一个能够通过监控工具找到它,所以我想知道是不是该在周末和调试器坐下来谈几个小时了


我目前正试图让垃圾收集器强制收集所有第1代对象,但这无助于线程计数。有问题的svchost.exe的线程数和句柄数增长缓慢,但肯定会增加

不管问题是什么,这都不是解决方案“是我调试整个代码库并希望找到内存泄漏发生地点的最佳选择吗?”是的。杀死其他进程中的线程以阻止内存泄漏是非常错误的。为什么不呢?杀死svchost.exe是个坏主意吗?关于如何追踪内存泄漏有什么建议吗?我正在运行的应用程序有几个进程,但它们的线程数保持稳定。同时,一个svchost.exe进程的线程数增加。因此,我的代码库中有一部分正在实现这一点,但我不确定如何找出哪一部分。@RyanO'Hara这只是一种不好的做法吗?或者可能会引入更多错误?使用内存探查器查找内存泄漏,您甚至可以使用visual studio 2015中的诊断工具来跟踪保持活动状态的对象