“System.AccessViolationException”類型的未經處理的異常在 System.Drawing.dll 中發生,嘗試讀取或寫入受保護的記憶體。這通常訓示其他記憶體已損壞
針對姚磊嶽的部落格文章中《利用Emgu.CV實作人臉識别詳解 (C#)--附源碼》(連結:http://blog.csdn.net/u011616825/article/details/51620061#reply)提供的源代碼,運作一會兒,大約2-3分鐘後在Program.cs中的Application.Run(newfaceDetect());就出現““System.AccessViolationException”類型的未經處理的異常在 System.Drawing.dll 中發生 其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常訓示其他記憶體已損壞。”的錯誤。本人通過查閱Google中提供的方式,測試解決了這個異常。
解決方式連結如下:
http://stackoverflow.com/questions/2808753/right-way-to-dispose-image-bitmap-and-picturebox;
http://stackoverflow.com/questions/1831732/c-sharp-picturebox-memory-releasing-problem;
這兩個連結中寫的方式沒有那麼的清楚,但我在這兩個文章中得到了啟發。通過異常捕捉,發現在程式運作中,每次捕捉到人臉之後,就需要調用Graphics類來繪制人臉所在區域矩形,但是卻沒有對Graphics的資源進行釋放,是以我在KingFaceDetect.cs類中的public faceDetectedObjfaceRecognize(Mat emguImage)方法的末尾加入了GC.Collect();,對垃圾進行回收,實測之後,這個異常完美解決。
代碼如下圖所示: