0

只是一个一般性问题,从 WindowsForms 应用程序中获取以下代码:

using System.Runtime.InteropServices;

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x216)  // WM_MOVING = 0x216
    {
        Rectangle rect = (Rectangle) Marshal.PtrToStructure(m.LParam, typeof (Rectangle));
        DoSomethingWithRect(rect);
    }
    base.WndProc(ref m);
}

我是否应该在 DoSomethingWithRect 之后调用 Marshal.DestroyStructure(m.LParam) 以防止内存泄漏?我很乐意得到解释为什么或为什么不。

谢谢。

4

1 回答 1

1

你不需要做任何比你在这里更多的事情。非托管内存归系统所有。它分配了它,它会处理掉它。

您没有分配任何非托管内存。您只需将传入的非托管结构的内容复制到新的托管结构中即可。.net GC 将占用该托管对象的生命周期。

于 2013-07-09T12:31:20.143 回答