如果在循环中使用,是否会造成内存泄漏?
mylist = mylist.Distinct().ToList();
如果是这样,如果你只需要更新它(特别是使用LINQ),那么对于列表是一个好的方法,而不是创建一个新的吗?
答案 0 :(得分:1)
引用的代码行:
mylist = mylist.Distinct().ToList();
将创建List<T>
类型的新对象,其中T
为typeof(mylist)
。
该列表将包含对mylist
中Distinct()
中原始对象的子集(可能全部或无)的引用,如#include <restbed>
LINQ运算符所返回。
因此,您在该行代码之后的情况是您拥有原始列表,原始列表中的所有原始对象,以及引用原始对象的某些子集的新列表。
所以是的,你已经使用了更多的内存(但相对来说并不多)。
这本身不是内存泄漏。这取决于你现在对新列表的处理方式。如果你只是将它设置为null,或者它超出范围,那么它通常会被垃圾收集(最终)并且你将获得所有内存;没有泄漏。但是,如果您执行的操作会导致另一个对象保留对列表的引用,那么您可能会发生内存泄漏。
您可能会在不知不觉中持有对新列表的引用的一些方法包括: