我发现了一行代码在我的项目中泄漏了内存。这是一个方法的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 /秒的分配。在五分钟内程序分配大约2GB的内存,然后崩溃,如果你注释掉“OpenCLDriver.clEnqueueNDRangeKernel”一切正常 – Lu4
一个重要的问题是,如果它泄漏托管或非托管内存。 – CodesInChaos