目前,我正在做一个C#应用程序的审查中,我看到的是:IDisposable接口:内存泄漏
public static bool ServiceExists(string servicename)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName == servicename)
{
return true;
}
}
return false;
}
在这种answer,亨克说,不使用Dispose()
(或using
)不会产生内存泄漏,是真是假?
能否保持现有的代码有它,或者我应该写成才,如:
public static bool ServiceExists(string servicename)
{
ServiceController[] services = ServiceController.GetServices();
bool exists = false;
foreach (ServiceController s in services)
{
using(s)
{
if (s.ServiceName == servicename)
{
exists = true;
}
}
}
return exists;
}
什么是在这种情况下使用Dispose()
(或using
)没有风险?
错误的例子。此方法不会提供服务。它不应该Dispose()它们。而第二个版本仅部署其中的一部分。 –
@HenkHolterman:我编辑了第二个版本,包括你的评论。我可以根据什么来确定是否应该调用'Dispose()'? –
只有当GetServices()方法清楚地表明责任转移给调用者时。您的版本可能会导致运行时错误。 –