WndProc,Marshal.DestroyStructure&防止内存泄漏

时间:2013-07-09 12:28:06

标签: c# winforms pinvoke marshalling wndproc

只是一般性问题,请从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)以防止内存泄漏?我很乐意为什么或为什么不解释。

感谢。

1 个答案:

答案 0 :(得分:1)

你不需要做任何比这里更多的事情。非托管内存由系统拥有。它分配了它,它将处理它。

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