.NET Windows 服务、线程和垃圾收集(可能存在内存泄漏)

标签 .net multithreading service garbage-collection

我正在开发一个 .NET Windows 服务,该服务创建几个线程,然后使用这些线程将打印作业发送到打印机(每个打印机都有一个线程)。我遇到一些问题,有时可以通过重新启动服务来解决。当服务运行一段时间后,也会出现一些问题。这让我怀疑可能存在内存泄漏。那么,有几个问题:

如果对象是在线程内创建的,垃圾收集器是否会收集该对象,或者该对象会一直存在直到线程停止/终止吗?

我可以使用哪些工具来监视 Windows 服务和我以编程方式启动的线程使用的内存量?

最佳答案

所有对象都是在线程内创建的。执行的每条指令都在线程内。在没有对对象的实时引用之后,对象将在某个时刻被垃圾收集。对象不“属于”创建它们的线程。

为了监视服务,您可以使用 perfmon,它有大量计数器用于垃圾收集等操作。要更详细地分析可能泄漏对象的位置,您应该使用探查器。如果您的程序也可以作为非服务运行,那么所有这一切都可能会变得更简单。 (您可能希望将其分离为“启动器”部分,然后是一个可以从服务或控制台应用程序使用的库。)

关于.NET Windows 服务、线程和垃圾收集(可能存在内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605444/

相关文章:

java - 让线程从主线程等待

java - 为什么当我递归调用函数时,它返回以前的值而不是新值?

java - 多线程java优化

java - 退出后杀死应用程序进程吗?

c++ - QtService 无法启动

linux - icinga2 监控正在运行的 linux 服务

.net - 强制自定义 WPF 控件正确调整大小

c# - 条件运算符?

.net - 在 WinForms 中向系统菜单(左上角图标菜单)添加条目?

c# - 如何在 Observable Collection 中搜索项目并获取其索引