我应该在ServiceController上调用Close()吗?
本文关键字:Close 调用 ServiceController 我应该 | 更新日期: 2023-09-27 18:01:39
目前我有这样一个方法:
private bool IsMyServiceRunning(string serviceName)
{
if (String.IsNullOrEmpty(serviceName))
throw new InvalidOperationException("ServiceName cannot be null or empty");
using (var service = new ServiceController(serviceName))
{
if (service.Status == ServiceControllerStatus.Running)
return true;
else
return false;
}
}
这是使用ServiceController类的正确方法吗?
我问的原因是,我看到的所有例子都没有调用Close()方法,当他们完成使用它。这些是不好的例子,还是我遗漏了什么?
您正在使用ServiceController
和using
-语句。这将调用ServiceController上的Dispose
,这与显式调用Close()相同。
所以在你的情况下,没有必要再次调用Close。
如果没有using语句,则需要调用ServiceController上的Close()或Dispose(),因为它使用了需要释放的非托管资源。否则就会出现内存泄漏。
ServiceController service = null;
try {
service = new ServiceController(serviceName);
if (service.Status == ServiceControllerStatus.Running) {
return true;
}
else {
return false;
}
}
finally{
if (service != null) {
service.Close(); // or service.Dispose();
}
}
您的示例将ServiceController
包装在using语句中,该语句将调用Dispose
,这将清理对象。它相当于调用Close
。
没有调用Close()
,因为这里使用了using
语法糖。
using (var resource = new Resource())
{
}
等价于:
{
var resource = new Resource();
try
{
}
finally
{
if (resource != null)
{
resource.Dispose();
}
}
}
自动调用Dispose()
清理资源。
我已经使用了close()方法一次又一次,但我不能dispose()再次使用。Dispose()使用了数据库中的连接…