读书人

资源开释

发布时间: 2013-07-04 11:45:33 作者: rapoo

资源释放

是用
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
using(anagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
using(?ManagementObjectCollection?moc?=?mc.GetInstances())
{

}
}
这样你就不用手动去关闭它了,系统会自动把他关闭 。因为手动关闭有的时候会出错的
同意!~
[解决办法]
using()
{

}

读书人网 >asp.net

热点推荐