资源释放
是用
moc = null;
mc = null;
还是用
moc.Dispose();
mc.Dispose();
/// <summary>
/// 获取网卡信息
/// </summary>
/// <returns></returns>
public static List<string> GetMacAddress()
{
try
{
//获取网卡硬件地址
string mac = "";
List<string> macList = new List<string>();
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString();
macList.Add(mac);
}
}
moc = null;
mc = null;
return macList;
}
catch
{
return null;
}
finally
{
}
}
[解决办法]
moc= null的意思是让moc不指向任何对象,此时 new ManagementClass()这个真实的对象还在内存中,等待回收(究竟什么时候回收是垃圾回收机制的问题)
而moc.Dispose();的意思是销毁 new ManagementClass();这个对象,但仍然指向这个被销毁的对象的地址;所以此时moc是不为null的,但它也无法使用
看下我的理解能否对您有所帮助~~
[解决办法]
用 using
using(anagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
using(?ManagementObjectCollection?moc?=?mc.GetInstances())
{
}
}
这样你就不用手动去关闭它了,系统会自动把他关闭 。因为手动关闭有的时候会出错的
[解决办法]
同意!~
[解决办法]
using()
{
}