【发布时间】:2018-03-21 21:13:06
【问题描述】:
从this 线程,Dispose() 必须显式为一次性对象调用。
Windows 服务停止时会发生什么?这些对象使用的资源是否自动释放?还是应该在服务停止之前将它们处理掉,如下所示:
public void Stop()
{
cancellationTokenSource.Cancel();
waitForAllTasksToExit();
cancellationTokenSource.Dispose();
}
“处置是个好习惯”,“服务停止时应该释放它们”我也是这么想的。但是参考文档有具体答案吗?
【问题讨论】:
-
AFAIK,当程序结束时,它的所有内存都会被释放。你有什么不一样的经历吗?
-
@CamiloTerevinto 这不仅仅是关于内存 - 打开(数据库)连接、文件访问等也在
Dispose中处理 -
@CamiloTerevinto 好吧,现在没有问题了。但问题是,正确的方法是什么?是否应该明确完成?文档是这样说的吗?
-
仅供参考(不是答案),但
using块将自动调用Dispose() -
进程“本地”的所有资源(内存、窗口句柄等)都将被自动释放。但是无论如何处置所有对象都是一个好习惯:正如@Toshi 所说,您必须考虑以某种方式在您处理之外的对象。例如,数据库服务器将认为未释放的连接仍处于活动状态(并最终将使用自己的方式释放它以检测该连接不再处于活动状态)