開發視頻監控系統紀實 10 視頻錄製過程中的記憶體無法寫入問題

來源:互聯網
上載者:User

之前把delegate變成一個方法的內部變數,結果一錄影就:

對“WindowsApplication1!Pixysoft.HikVision.STREAM_DIRECT_READ_CALLBACK::Invoke”類型的已記憶體回收委託進行了回調。這可能會導致應用程式崩潰、損壞和資料丟失。向Unmanaged 程式碼傳遞委託時,託管應用程式必須讓這些委託保持活動狀態,直到確信不會再次調用它們。

 

後來作為了外部域錄影錄製了10多秒,就提示:嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。

 

 估計是記憶體釋放問題。。。

 

匯總以下,肯定是delegate被回收的問題。參考文獻:

http://msdn.microsoft.com/zh-cn/library/43yky316(VS.80).aspx

 http://topic.csdn.net/u/20080423/03/43b58852-5cac-4aac-a7da-6a69e69b21cd.html

 

reference:

http://msdn.microsoft.com/zh-cn/library/system.gc.keepalive.aspx

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.languages.csharp/2006-09/msg01380.html

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/d12c13a6-f103-48c8-9933-291a1685941a/

http://blog.csdn.net/fanweiwei/archive/2007/09/11/1780742.aspx

http://social.msdn.microsoft.com/Forums/en-US/clr/thread/66ea26a6-7c3d-4e96-9336-e3f148659f22/

http://topic.csdn.net/u/20080423/03/43b58852-5cac-4aac-a7da-6a69e69b21cd.html

keyword:GC, CALLBACK,DELEGATE, DLLIMPORT

 

問題解決了。是介面聲明問題:

 

錯誤的聲明:

public delegate int StreamDirectReadCallback(int channelNumber, [MarshalAs(UnmanagedType.LPArray, SizeConst = 704 * 576 * 5)] byte[] DataBuf, uint Length, Pixysoft.HikVision.DS40xxSDK.FrameType_t FrameType, System.IntPtr context);

 

正確的聲明:

public delegate int StreamDirectReadCallback(int channelNumber, IntPtr DataBuf, uint Length, Pixysoft.HikVision.DS40xxSDK.FrameType_t FrameType, System.IntPtr context);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.