2011-08-07 128 views
0

我发现了一行代码在我的项目中泄漏了内存。这是一个方法的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如何调用泄漏内存?我错过了什么吗?

+0

你怎么知道它正在泄漏内存? –

+0

我看着taskmgr,它显示约10 MB /秒的分配。在五分钟内程序分配大约2GB的内存,然后崩溃,如果你注释掉“OpenCLDriver.clEnqueueNDRangeKernel”一切正常 – Lu4

+0

一个重要的问题是,如果它泄漏托管或非托管内存。 – CodesInChaos

回答

1

似乎有OpenCL中与clEnqueueNDRangeKernel内存泄漏问题,因为2009年已知的固定2010 ...

http://www.opentk.com/node/1541?page=3
http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=122161&highlight_key=y

+0

不是你的链接关于不同的问题?对我来说,听起来像第一个是关于包装中的错误,第二个是amd库中的错误。 – CodesInChaos

+0

是真的 - 但都导致内存泄漏...因为我不知道我发布的两个OP的情况... – Yahia

+0

嘿,我的问题是相同的CLOO,opencl分配额外的内存应该发布的OpenCLEvent谢谢!!!! – Lu4