在 C# 中删除数据结构和释放内存的有效方法(垃圾收集)

Efficient way to Delete Data-Structures and Release Memory in C# (Garbage Collection)

想象一个由多个嵌套(标准)容器组成的数据结构,如下所示。

示例:

var data = new Dictionary<int, HashSet<float>>()
{
    {
        0, new HashSet<float>() { 1F, 2F, }
    },
    {
        1, new HashSet<float>() { 3F, 4F, }
    },
};

data.Remove(0);

完全删除顶层Dictionary(包括HashSet内的嵌套元素)的一个值的正确方法是什么?内存应该被释放,应该没有泄漏。

data.Remove(0) 是否是最好的方法,因为垃圾回收会自动完成所有工作?

没有区别。垃圾收集器是释放内存的唯一方法。 IDisposable 仅用于允许对象(在调用它后仍然存在)释放非托管资源(可以是非托管内存、文件句柄等),它对托管内存没有影响。

事实上,现代 C# 8 nullable/non 可为 null 的引用类型实际上阻碍了 "just" 将变量设置为 null 的方式。

删除字典的所有键不会释放任何内存,无论如何您都必须等待垃圾收集器。