我遇到這樣的代碼:Windows服務實現IDisposable - 這是不好的做法嗎?
public class ServiceLauncher2 : ServiceBase, IDisposable
然後將此:
/// <summary>
/// Disposes the controllers
/// </summary>
// This is declared new as opposed to override because the base class has to be able to
// call its own Dispose(bool) method and not this one. We could just as easily name
// this method something different, but keeping it Dispose is just as valid.
public new void Dispose()
{
foreach (var mgr in _threadManagers)
mgr.Dispose();
base.Dispose();
}
我從來沒有在Windows服務實施前看到了這一點。通常只是OnStop/OnStart被覆蓋。這是不好的做法嗎?
它是一種服務應用程序,但爲了調試的目的有一小段代碼通過控制檯(interative)運行它,但部署時它是一項服務。 – 2013-03-12 19:29:42
好的,所以對於控制檯模式的緣故,我會離開Dispose方法,因爲OnStop不會被調用。 – 2013-03-12 19:37:58
對於ServiceBase來說,當整個進程終止時調用一個析構函數並不重要,因此無論如何它的所有非託管資源都將被釋放。這並不是說我們正在處理一個多次實例化和銷燬的庫類,從而導致內存泄漏和資源耗盡。 – ajeh 2017-10-03 15:13:47