C# WMI调用性能
我需要在我的服务的构造函数中进行WMI调用。但是,当我启动/重新启动系统时,此调用会花费大量时间 我正在使用以下代码获取windows服务的路径。。。。 这里我使用了枚举选项来提高查询性能,现在为了使用它,我必须使用ManagementScope,即root\civm2,每次我都要使用root'civm2作为管理范围 之前我使用的是managementObjectCollection.Count以了解它是否包含任何项,现在为了提高性能,我使用的是managementObjectEnumerator.MoveNext,它是否有帮助,我已经对与计数相关的代码进行了注释 有没有更好的方法来提高相同代码的性能 EnumerationOptions=新的EnumerationOptions; //options.Rewindable=false;**/为了得到结果,我不得不对此进行评论** options.returninstally=true; string query=string.format从Win32_服务中选择路径名,其中Name='{0}',MyService; ManagementScope ms12=新建ManagementScope@root\cimv2; ms12.连接; 使用var managementObjectSearcher=new ManagementObjectSearcherquery { managementObjectSearcher.Scope=ms12; managementObjectSearcher.Options=选项; var managementObjectCollection=managementObjectSearcher.Get; //如果managementObjectCollection.Count>0 //{ var managementObjectEnumerator=managementObjectCollection.GetEnumerator; 如果managementObjectEnumerator.MoveNext { var invalidChars=new Regexstring.FormatCultureInfo.InvariantCulture,[{0}],Regex.escapeNewStringPath.GetInvalidPathChars; var path=invalidChars.ReplacemanagementObjectEnumerator.Current.GetPropertyValuePathName.ToString,string.Empty; Console.WriteLinepath; } //} 其他的 { Console.WriteLinelse部分。。。; } } 我是否以正确的方式使用范围和枚举选项??C# WMI调用性能,c#,wmi,C#,Wmi,我需要在我的服务的构造函数中进行WMI调用。但是,当我启动/重新启动系统时,此调用会花费大量时间 我正在使用以下代码获取windows服务的路径。。。。 这里我使用了枚举选项来提高查询性能,现在为了使用它,我必须使用ManagementScope,即root\civm2,每次我都要使用root'civm2作为管理范围 之前我使用的是managementObjectCollection.Count以了解它是否包含任何项,现在为了提高性能,我使用的是managementObjectEnumerato
请指导。作为对您的另一个建议的回答,您可以构建类的对象路径并直接使用ManagementObject来提高性能,现在如果您想检查ManagementObject是否返回实例,您可以使用私有属性IsBound
在较新版本的.NET framework中,绑定的发生时间似乎越晚越好。至少在我测试特定共享文件夹的存在性时是这样 这里是对@RRUZ解决方案的更新,它使用try-catch而不是反映IsBound内部属性
var servicePath = string.Format("Win32_Service.Name=\"{0}\"", "MyService");
string pathName = null;
try
{
var wmiObject = new ManagementObject(servicePath);
pathName = (string)wmiObject.GetPropertyValue("PathName");
}
catch {}
if (pathName != null)
{
var invalidChars = new Regex(string.Format(CultureInfo.InvariantCulture, "[{0}]", Regex.Escape(new string(Path.GetInvalidPathChars()))));
var path = invalidChars.Replace(pathName, string.Empty);
Console.WriteLine(path);
}
else
{
Console.WriteLine("Else part...");
}
var servicePath = string.Format("Win32_Service.Name=\"{0}\"", "MyService");
string pathName = null;
try
{
var wmiObject = new ManagementObject(servicePath);
pathName = (string)wmiObject.GetPropertyValue("PathName");
}
catch {}
if (pathName != null)
{
var invalidChars = new Regex(string.Format(CultureInfo.InvariantCulture, "[{0}]", Regex.Escape(new string(Path.GetInvalidPathChars()))));
var path = invalidChars.Replace(pathName, string.Empty);
Console.WriteLine(path);
}
else
{
Console.WriteLine("Else part...");
}