2011-08-07 126 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