代码之家  ›  专栏  ›  技术社区  ›  TheMixy

C#不使用额外内存的对象的顺序列表

  •  2
  • TheMixy  · 技术社区  · 6 年前

    在C#列表排序中,我发现了一个关于堆栈溢出的老争论: How to Sort a List<T> by a property in the object

    我自己也曾在上面的链接中排序与投票最多的回复相同的列表:

    List<Order> newList = oldList.OrderBy(o=>o.SomeProperty).ToList();
    

    不要以为这会在内存中创建一个全新的列表。因此,上面链接中投票数第二高的回复本身就是最佳解决方案(.Sort with Comparison)。

    我的问题是,如果更改第一个解决方案可以避免内存重复:

    oldList = oldList.OrderBy(o=>o.SomeProperty).ToList();
    

    或者这会再次在内存中创建一个新列表吗?

    note:I tested 已经有了,而且排序是这样的,但是我不知道如何检查(额外的/新的)内存使用情况。

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  2
  •   Okami TheViralGriffin    6 年前
    oldList = oldList.OrderBy(o=>o.SomeProperty).ToList();
    

    将在内存中创建一个新列表并分配引用 oldList 去吧。内存中有两个列表,一个已排序,一个未排序。未排序的列表将保留在内存中,直到没有其他剩余的引用为止。在这一点上,列表是可行的垃圾收集和内存最终将被释放或回收。