【发布时间】:2011-10-21 20:10:55
【问题描述】:
我在我的项目中发现了一行代码泄漏了内存。这是一个 DllImport 方法:
[DllImport("OpenCL")] public static extern Error clEnqueueNDRangeKernel(OpenCLCommandQueue command_queue, OpenCLKernel kernel, Int32 work_dim, [In] IntPtr[] global_work_offset, [In] IntPtr[] global_work_size, [In] IntPtr[] local_work_size, Int32 num_events_in_wait_list, [In] OpenCLEvent[] event_wait_list, out OpenCLEvent e);
使用以下代码调用它:
OpenCLEvent e;
OpenCLDriver.clEnqueueNDRangeKernel(CommandQueue.OpenCLCommandQueue, OpenCLKernel, globalWorkSize.Length, globalWorkOffset, globalWorkSize, localWorkSize, eventWaitList.Count, eventWaitList.OpenCLEventArray, out e);
return null;
CommandQueue.OpenCLCommandQueue 等参数都是普通的属性或变量,不会泄露内存,后面没有代码。
我不明白 clEnqueueNDRangeKernel 怎么会调用泄漏内存?我错过了什么吗?
【问题讨论】:
-
你怎么知道它在泄漏内存?
-
我查看了 taskmgr,它显示大约 10 mb/sec 的分配。在五分钟内,程序会分配大约 2 GB 的内存,然后如果您注释掉“OpenCLDriver.clEnqueueNDRangeKernel”一切正常
-
一个重要的问题是它是否泄漏了托管或非托管内存。
-
我认为它不能被管理,它会被 GC'ed
标签: c# .net debugging memory-leaks