gpt4 book ai didi

c# - WMI 性能不佳

转载 作者:行者123 更新时间:2023-11-30 16:35:30 25 4
gpt4 key购买 nike

我用 C# 编写了一个代码,使用 WMI (System.Management) 将逻辑驱动器映射到它们的物理磁盘。该代码运行完美,但速度非常慢。在我的机器(Windows 7 x64,双核和 3 GB RAM)中,它运行至少 1 秒。1 秒对我来说太慢了,即使是 0.1 也足以完成。这个功能可以在不到 0.1 秒内完成,这让我非常难过。

是否有任何 Win32API 函数可以提供帮助?

还有什么建议吗?

到目前为止,这是我的代码:

List<Dictionary<string, string>> results = new List<Dictionary<string, string>>();

using (ManagementClass diskDriveClass = new ManagementClass(@"Win32_Diskdrive"))
{
using (ManagementObjectCollection diskDrives = diskDriveClass.GetInstances())
{
foreach (ManagementObject diskDrive in diskDrives)
{
string deviceId = (string)diskDrive["DeviceId"];
Dictionary<string, string> logicalDisksResults = new Dictionary<string, string>();
Trace.WriteLine(deviceId);

using (ManagementObjectCollection relatedPartitions = diskDrive.GetRelated("Win32_DiskPartition"))
{
foreach (ManagementObject relatedPartition in relatedPartitions)
{
Trace.WriteLine("-\t" + relatedPartition["Name"]);

using (ManagementObjectCollection relatedLogicalDisks = relatedPartition.GetRelated("Win32_LogicalDisk"))
{
foreach (ManagementBaseObject relatedLogicalDisk in
relatedLogicalDisks)
{
Trace.WriteLine("\t-\t" + relatedLogicalDisk["Name"] + " " + relatedLogicalDisk["FileSystem"]);
logicalDisksResults.Add((string)relatedLogicalDisk["Name"], (string)relatedLogicalDisk["FileSystem"]);
}
}
}
}

results.Add(logicalDisksResults);
}
}
}

最佳答案

好吧,这里有一些代码至少在我的系统上运行速度更快(从客观的角度来看)并给出相同的结果。由于驱动器列表几乎不可能逐秒更改,我不确定您为什么如此关心,但无论如何,看看这是否会让您更快乐。您可以通过删除开始时获取 Win32_DiskDrive 的代码来稍微加快它的速度,但祝它在 0.1 秒内运行:)

Dictionary<string, Dictionary<string, string>> results = new Dictionary<string,Dictionary<string,string>>();            ManagementClass diskPartMap = null;ManagementObjectCollection diskPartIns = null;ManagementClass partLogicalMap = null;ManagementObjectCollection partLogicalIns = null;try{    using (ManagementClass diskDriveClass = new ManagementClass("Win32_Diskdrive"))    {        using (ManagementObjectCollection diskDrives = diskDriveClass.GetInstances())        {            foreach (ManagementObject diskDrive in diskDrives)            {                results.Add((string)diskDrive["DeviceId"], new Dictionary<string, string>());            }        }    }    Dictionary<string, ManagementObject> partToDisk = new Dictionary<string, ManagementObject>();    Dictionary<string, ManagementObject> partToLogical = new Dictionary<string, ManagementObject>();    diskPartMap = new ManagementClass("Win32_DiskDriveToDiskPartition");    diskPartIns = diskPartMap.GetInstances();    foreach (ManagementObject diskDrive in diskPartIns)    {        ManagementObject o = new ManagementObject((string)diskDrive["Antecedent"]);        partToDisk.Add((string)diskDrive["Dependent"], o);    }    partLogicalMap = new ManagementClass("Win32_LogicalDiskToPartition");    partLogicalIns = partLogicalMap.GetInstances();    foreach (ManagementObject diskDrive in partLogicalIns)    {        ManagementObject o = new ManagementObject((string)diskDrive["Dependent"]);        string s = (string)diskDrive["Antecedent"];        partToLogical.Add(s, o);    }    foreach (KeyValuePair<string, ManagementObject> pair in partToDisk)    {        string deviceId = (string)pair.Value["DeviceId"];        Dictionary<string, string> dict = null;        if (!results.ContainsKey(deviceId))        {            dict = new Dictionary<string, string>();            results[deviceId] = dict;        }        else        {            dict = results[deviceId];        }        if (partToLogical.ContainsKey(pair.Key))        {            ManagementObject o = partToLogical[pair.Key];            dict.Add((string)o["Name"], (string)o["FileSystem"]);        }    }}finally{    if (diskPartIns != null)    {        diskPartIns.Dispose();        diskPartIns = null;    }    if (diskPartMap != null)    {        diskPartMap.Dispose();        diskPartMap = null;    }    if (partLogicalIns != null)    {        partLogicalIns.Dispose();        partLogicalIns = null;    }    if (partLogicalMap != null)    {        partLogicalMap.Dispose();        partLogicalMap = null;    }}

关于c# - WMI 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com