Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何销毁字典等C#数据<;字符串,列表<;行动<;对象>&燃气轮机>;?_C#_Dictionary_Delegates - Fatal编程技术网

如何销毁字典等C#数据<;字符串,列表<;行动<;对象>&燃气轮机>;?

如何销毁字典等C#数据<;字符串,列表<;行动<;对象>&燃气轮机>;?,c#,dictionary,delegates,C#,Dictionary,Delegates,我定义了一个像Dictionary这样的对象来存储一些要调用的委托方法。如果我想毁掉这本字典。我需要先在字典中调用List.Clear()?或者只需调用字典。清除就可以了 这个: foreach(KeyValuePair<string, List<Action<object>>> kvp in dict) { kvp.Value.Clear(); } dict.Clear(); dict = null; 单凭这一点就行了。只有在全局级别声明字典引用时

我定义了一个像
Dictionary
这样的对象来存储一些要调用的委托方法。如果我想毁掉这本字典。我需要先在字典中调用
List.Clear()
?或者只需调用
字典。清除
就可以了

这个:

foreach(KeyValuePair<string, List<Action<object>>> kvp in dict)
{
   kvp.Value.Clear();
}

dict.Clear();
dict = null;

单凭这一点就行了。只有在全局级别声明字典引用时,才需要清除字典引用。不需要清除本地对象

    dict = null;

只要对象的引用被清除,它就会在下一代GC上从内存中被清除。

仅此即可。只有在全局级别声明字典引用时,才需要清除字典引用。不需要清除本地对象

    dict = null;

只要对象的引用被清除,它将在该代的下一个GC上从内存中清除。

如果您将要删除对
dict
的最后一个实时引用,请不要对其进行任何处理:如果
dict
仍在范围内,只需分配
null
,或者,如果
dict
的范围即将结束,则不要执行任何操作


不需要显式清除字典或它包含的任何列表,因为垃圾收集器会以任何方式处理它。显式清除字典及其包含的列表将浪费CPU周期。

如果您将要删除对
dict
的最后一个实时引用,请不要为任何引用烦恼:如果
dict
的作用域仍在作用域中,只需将
null
赋值,或者如果
dict
的作用域即将结束,则不执行任何操作


不需要显式清除字典或它包含的任何列表,因为垃圾收集器会以任何方式处理它。显式清除字典及其包含的列表将浪费CPU周期。

只要您没有对
字典中存储的对象的引用或
字典本身的引用,就可以将其设置为
null

dict = null;

GC
将处理其余部分。

只要您没有对
字典中存储的对象或
字典本身的引用,就可以将其设置为
null

dict = null;

GC
将处理其余部分。

第二个工作吗?如果是,则使用该选项,否则使用第一个选项-没有别的了。甚至连
dict.Clear()都没有。您甚至不需要
dict=null如果变量超出范围。虽然如果您来自C语言背景,明确清除内容听起来很自然,但C#的垃圾收集系统会在不再需要资源时释放资源,让您花更多的时间对应用程序的核心部分进行编码。第二个可以吗?如果是,则使用该选项,否则使用第一个选项-没有别的了。甚至连
dict.Clear()都没有。您甚至不需要
dict=null如果变量超出范围。虽然如果您来自C后台,明确清除内容听起来很自然,但C#的垃圾收集系统会在不再需要资源时释放资源,如果字典列表中存储的委托来自外部,则允许您花更多时间对应用程序的核心部分进行编码。调用清除方法是必要的?@JerryLee代理来自何处并不重要。如果您不打算重用字典或列表,请不要对其调用
Clear()
。因此,您的意思是,即使字典包含一些委托,只要将其设置为null,GC也会收集它?对吗?@JerryLee是的,没错。只要没有其他实时引用您的字典,例如来自其他线程的引用,GC将收集字典、其内部结构、列表和列表的委托。谢谢,这解决了我很久以来的疑问!如果字典列表中存储的代理来自外部。调用清除方法是必要的?@JerryLee代理来自何处并不重要。如果您不打算重用字典或列表,请不要对其调用
Clear()
。因此,您的意思是,即使字典包含一些委托,只要将其设置为null,GC也会收集它?对吗?@JerryLee是的,没错。只要没有其他实时引用您的字典,例如来自其他线程的引用,GC将收集字典、其内部结构、列表和列表的委托。谢谢,这解决了我很久以来的疑问!