我需要在我的服务的构造函数中进行 WMI 调用。但是当我启动/重新启动系统时,此调用需要大量时间。
我正在使用以下代码来获取 Windows 服务的路径....这里我使用EnumerationOptions
来提高查询性能,现在为了使用它我必须使用ManagementScope
which is "root\civm2",每个时间我必须使用“root'civm2”作为管理范围,
之前我managementObjectCollection.Count
用来知道它是否包含任何项目,现在为了提高我正在使用的性能managementObjectEnumerator.MoveNext
,它会有所帮助吗,我已经评论了与计数相关的代码。
有没有更好的方法来提高相同代码的性能...
EnumerationOptions options = new EnumerationOptions();
// options.Rewindable = false; **// I HAVE TO COMMENT OUT THIS IN ORDER TO GET THE RESULTS....**
options.ReturnImmediately = true;
string query = string.Format("SELECT PathName FROM Win32_Service WHERE Name = '{0}'", "MyService");
ManagementScope ms12 = new ManagementScope(@"root\cimv2");
ms12.Connect();
using (var managementObjectSearcher = new ManagementObjectSearcher(query))
{
managementObjectSearcher.Scope = ms12;
managementObjectSearcher.Options = options;
var managementObjectCollection = managementObjectSearcher.Get();
//if (managementObjectCollection.Count > 0)
//{
var managementObjectEnumerator = managementObjectCollection.GetEnumerator();
if (managementObjectEnumerator.MoveNext())
{
var invalidChars = new Regex(string.Format(CultureInfo.InvariantCulture, "[{0}]", Regex.Escape(new string(Path.GetInvalidPathChars()))));
var path = invalidChars.Replace(managementObjectEnumerator.Current.GetPropertyValue("PathName").ToString(), string.Empty);
Console.WriteLine(path);
}
//}
else
{
Console.WriteLine("Else part...");
}
}
我是否以正确的方式使用范围和 EnumerationOption ? 请指导。