慎用 out

最近需要評估一下海康攝像頭不同抓拍方式的性能,以及封裝類的可靠性。

在測試過程中,又發現了當初遇見的設備內存抓拍報錯的問題。當初排查的結論是:當封裝類開啓預覽的情況下,使用設備抓圖有較高概率抓拍失敗。由於預覽是必需的,最終選擇了預覽抓拍。

現在,換用lazarus進行測試,發現設備抓圖必失敗,與是否預覽無關。一點點調試,發現直接調用SDK原始方法進行設備抓圖正常,使用封裝類的設備抓圖就不行,那肯定是封裝類出了問題。

最終發現,封裝類的設備抓圖使用了out來修飾參數,參數是TMemoryStreamTJPEGImage對象,嘗試去掉out修飾符,然後就一切正常了。

記得很久前專門研究過outvar修飾符的區別,當時查閱的結果是:outvar修飾的參數都是傳址的,區別是out會對參數進行初始化,而var則不會。

另外,參數爲對象的情況,實際也是傳址的。

本次發現的問題可能就是使用out來修飾對象參數導致的,但並沒有進行進一步的測試。


測試環境

操作系統:win10

硬盤:SSD

測試結果

  1. 子碼流預覽抓圖,耗時毫秒級;主碼流預覽抓圖,耗時10+毫秒級

  2. 預覽抓圖比設備拍圖耗時少得多,設備抓圖在100+毫秒級

  3. 在相同分辨率情況下,預覽抓圖的文件大小比設備抓圖的略大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章