Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Windows_Visual Studio 2015 - Fatal编程技术网

C# 我真的需要清除本地列表吗?

C# 我真的需要清除本地列表吗?,c#,.net,windows,visual-studio-2015,C#,.net,Windows,Visual Studio 2015,如果我有一个函数,其中有一个字符串列表,比如: List<string> mylist = new List<string>(); 真的需要清楚吗?或者gc会帮我处理事情 我正在使用C、.Net4.5、Windows。不,您不需要清除它。只有当您希望使用现有列表并清除元素,以便可以将其与新元素一起再次使用时,才可以这样做。一旦您的变量超出范围,它将被GC'd 如果您的列表由对象引用类型实例组成,那么如果您有单独的变量指向这些引用,那么这些引用可能会保留,但当然,一旦它们

如果我有一个函数,其中有一个字符串列表,比如:

List<string> mylist = new List<string>();
真的需要清楚吗?或者gc会帮我处理事情


我正在使用C、.Net4.5、Windows。

不,您不需要清除它。只有当您希望使用现有列表并清除元素,以便可以将其与新元素一起再次使用时,才可以这样做。一旦您的变量超出范围,它将被GC'd


如果您的列表由对象引用类型实例组成,那么如果您有单独的变量指向这些引用,那么这些引用可能会保留,但当然,一旦它们超出范围,这些引用也将被GC保存。不过,这与列表无关。

不。你不应该这样做


清除存储实际值的列表。它将内存返回到操作系统。所有这些都已经完成了,垃圾收集器可能会更有效地完成。您只是在为您和GC创建额外的工作。

不,这不是必需的,它不需要花费时间,GC通常会在您处理完对象后处理它。不需要调用Clear方法。如果一个类没有实现IDisposable,这不是你的问题。只是。@Skynet在变量超出范围之前将其设置为null是毫无意义的。只有当变量保留在作用域中,但在相当长的一段时间内未使用时,该值才有意义。@Skynet否,将其设置为null不会释放内存。如果变量是该对象的唯一剩余引用,则它将使该对象符合收集条件。此外,如果变量将保持在范围内,但抖动可以证明值不会被再次读取,它仍然可以考虑引用死,所以剩下的情况下,变量实际上将被再次读取,但不应该访问当前对象是非常罕见的。此外,该问题在从函数返回之前指定,因此,我们知道它很快就会超出范围。但假设这些引用类型变量不是本地变量,对吗?我不确定我是否理解这个问题。我指的是您评论中的一节:“…如果您有单独的变量,那么这些引用可能会保留…”。你是说如果它们是全局变量吗?不,我是说任何变量。取决于你把它们放在哪里。在方法中,在类中作为字段等。
mylist.Clear();