我發現了一行代碼在我的項目中泄漏了內存。這是一個方法的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