古詩詞大全網 - 成語用法 - c#集合 clear後能保證沒有內存泄露嗎

c#集合 clear後能保證沒有內存泄露嗎

不能保證!

以下的簡單測試程序可以證明這點

using?System;

using?System.Collections.Generic;

namespace?ConsoleApplication1

{

//?定義壹個類

class?Person

{

public?string?Name;

public?int?Age;

}

class?Program

{

static?void?Main(string[]?args)

{

//?創建集合並向集合中添加壹些元素

List<Person>?list?=?new?List<Person>();

list.Add(new?Person?{?Name?=?"Li",?Age?=?23?});

list.Add(new?Person?{?Name?=?"Xu",?Age?=?21?});

list.Add(new?Person?{?Name?=?"Jin",?Age?=?24?});

//?p0引用集合元素0

Person?p0?=?list[0];

//?p1引用集合元素1

Person?p1?=?list[1];

//?清除集合

list.Clear();

//?集合清除後,p0和p1仍然有效,所以以下語句可以輸出,不會出錯

Console.WriteLine(p1.Name);

Console.WriteLine(p2.Name);

}

}

}

結論:單純清除集合元素,不能保證內存不泄漏。能否徹底釋放對象,關鍵在於對這個對象的引用次數是否為零!在上面的程序中,集合雖然被清除了,但原來集合中元素0和元素1仍然被p0和p1引用著,所以,兩個對象依然有效