我定义了一个像Dictionary<string, List<Action<object>>>
这样的对象来存储一些委托方法来调用。如果我想破坏这个字典。我是否需要先在字典中调用List.Clear()
?或者只是致电Dictionary.Clear
会好吗?
这一个:
foreach(KeyValuePair<string, List<Action<object>>> kvp in dict)
{
kvp.Value.Clear();
}
dict.Clear();
dict = null;
或者这个:
dict.Clear();
dict = null;
答案 0 :(得分:4)
如果您要将最后一次实时引用放到dict
,请不要理会其中任何内容:如果null
仍在范围内,则只需指定dict
,或者不如果dict
的范围即将结束,则可以做任何事情。
不需要显式清除字典或其包含的任何列表,因为垃圾收集器会以任何方式处理它。显式清除字典及其包含的列表将浪费CPU周期。
答案 1 :(得分:1)
只要您没有对Dictionary
或Dictionary
本身中存储的对象进行引用,就可以将其设置为null
。
dict = null;
GC
会照顾其余部分。
答案 2 :(得分:0)
dict = null;
只要清除了对象的引用,就会在该代的下一个GC上从内存中清除它。