Marshal.DestroyStructure 与 .Net 中的 Marshal.FreeHGlobal

Marshal.DestroyStructure vs Marshal.FreeHGlobal in .Net

我有一个托管 .Net class,它创建了我需要确保正确清理的非托管资源。

我有一个顺序结构:

[StructLayout(LayoutKind.Sequential)]
struct FooBar { ... }

然后在构造函数中我有:

// Allocate the memory
var fb = new FooBar(...);
int length = Marshal.SizeOf(typeof(FooBar));
this.pointer = Marshal.AllocHGlobal(length);
Marshal.StructureToPtr(fb, this.pointer, false);

// Then I use this.pointer in extern calls

然后在我的 ~Finaliser/Dispose 方法中,我使用 Marshal.DestroyStructureMarshal.FreeHGlobal 或两者(如果是,顺序是什么)来忍受我不泄漏内存?

奖金问题:

两者都有。 Marshal.DestroyStructure 将释放 FooBar 的 "content",而 Marshal.FreeHGlobal 将释放 "container"。显然首先释放内容,然后释放容器。所以首先 Marshal.DestroyStructure 然后 Marshal.FreeHGlobal.

我不认为 CriticalFinalizerObject 与编组 struct 有任何关系,并且 struct 不能继承任何东西,所以对第一个的回答是否定的问题。