我使用GetBestInterface(iphlpapi.dll)获得了一个InterfaceIndex。
目标:阅读其他界面属性。
此WMI查询速度很慢:
SELECT MACAddress,Name,GUID,NetConnectionID FROM Win32_NetworkAdapter WHERE InterfaceIndex=
在C#中,更快,
NetworkInterface.GetAllNetworkInterfaces()
但是每个NetworkInterface都没有属性InterfaceIndex(sic!)。
我不知道如何优化它:
EnumerationOptions wmi_options = new EnumerationOptions();
wmi_options.Rewindable = false;
wmi_options.ReturnImmediately = true;
string wql = "SELECT MACAddress,Name,GUID,NetConnectionID FROM Win32_NetworkAdapter WHERE InterfaceIndex=" + iface;
ManagementObjectCollection recordset = new ManagementObjectSearcher(@"root\cimv2", wql, wmi_options).Get();
foreach (ManagementObject mo in recordset)
选项似乎没有帮助。 我可以拆分操作并缓存任何步骤吗?
或另一条路径:避免WMI并从注册表中查找接口(使用InterfaceIndex)?
HKLM \系统\ CurrentControlSet \服务\ TCPIP \参数\接口
HKLM \系统\ CurrentControlSet \控制\网络{4D36E972-E325-11CE-BFC1-08002BE10318}
答案 0 :(得分:0)
我不知道这实际上是否更快,但你尝试过PowerShell吗?
string IfIndex = "15";
string psscript = "get-netadapter | Where-Object interfaceindex -eq " + IfIndex;
PowerShell powershell = PowerShell.Create();
powershell.Runspace = RunspaceFactory.CreateRunspace();
powershell.Runspace.Open();
powershell.AddScript(psscript);
foreach (PSObject result in powershell.Invoke())
{
Console.WriteLine("Name: {0} " + "Status: {1}",result.Members["Name"].Value, result.Members["status"].Value);
}
Console.Read();
使用System.Management.Automation& System.Management.Automation.Runspaces;
我还没有测试过代码,这是我的头脑。