C# 我应该在ServiceController上调用Close()吗?
目前我有这样一种方法:C# 我应该在ServiceController上调用Close()吗?,c#,.net,C#,.net,目前我有这样一种方法: private bool IsMyServiceRunning(string serviceName) { if (String.IsNullOrEmpty(serviceName)) throw new InvalidOperationException("ServiceName cannot be null or empty"); using (var service = new Service
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 (var resource = new Resource())
{
}
相当于:
{
var resource = new Resource();
try
{
}
finally
{
if (resource != null)
{
resource.Dispose();
}
}
}
对Dispose()
的自动调用会清理资源
有关更多信息,请参阅帖子。我已经多次使用了close()方法,但我无法再次使用dispose()。Dispose()已使用数据库中的连接 我不知道为什么有两个人投了这个票。最后一句没有意义,第一句是错误的。您可以一遍又一遍地调用Dispose()
。规范规定,Dispose()
必须能够被调用任意次数。