0

我了解使用 Dispose/Finalize 模式的基础知识,并且尽我所能使用它,但我似乎对这种情况有疑问。

我有一个非常小的对象:

// Small Object
public class Class1
{
    public int SampleId { get; set; }
}

// Form Level Object
public IList<Class1> MyClasses { get; set; }

MyClasses 是通过从数据库加载多达几千个 Class1 对象来填充的。该过程正常工作。

因为 List<> 对象上没有 Dispose 方法,并且它使用了大量内存,所以我不确定如何处理它。当用户关闭表单时,我是否允许默认的 Close() 方法清理 MyClasses,我是否应该使用 MyClasses.Clear() 来减小 Dispose 方法中列表的大小,将 MyClasses 设置为 null,或者可能是其他什么?

一旦用户关闭此表单,他们可能会打开表单备份并加载另一组数据以使用可能有几千大小的数据。几分钟后,它们可能会消耗大量内存。

我想很快回收 MyClasses 正在使用的内存,以便下次用户打开表单时可以重用它。

如果 Class1 中有许多字段使每条记录变得相当大,那我应该使用什么方法来清理 MyClasses 会有所不同吗?

4

1 回答 1

0

简短的回答:您无需担心尝试回收 a 的内存List

更长的答案:您可以在此处阅读有关 .NET 的垃圾收集的信息。每当托管对象(.NET 类型的对象)不再被任何变量引用时,它们就会成为垃圾收集器的对象。他们会自动清理。

如果您的应用程序占用过多内存时遇到问题,您可以:

  1. 检索比实际需要更多的数据(寻找可能检索大型数据集并在内存中过滤的位置,而不是在检索期间应用过滤)
  2. 您保留了对不再需要的旧数据的引用,这会阻止 GC 接触它。
于 2019-08-04T23:55:51.883 回答