最近需要評估一下海康攝像頭不同抓拍方式的性能,以及封裝類的可靠性。
在測試過程中,又發現了當初遇見的設備內存抓拍報錯的問題。當初排查的結論是:當封裝類開啓預覽的情況下,使用設備抓圖有較高概率抓拍失敗。由於預覽是必需的,最終選擇了預覽抓拍。
現在,換用lazarus
進行測試,發現設備抓圖必失敗,與是否預覽無關。一點點調試,發現直接調用SDK原始方法進行設備抓圖正常,使用封裝類的設備抓圖就不行,那肯定是封裝類出了問題。
最終發現,封裝類的設備抓圖使用了out
來修飾參數,參數是TMemoryStream
和TJPEGImage
對象,嘗試去掉out
修飾符,然後就一切正常了。
記得很久前專門研究過out
和var
修飾符的區別,當時查閱的結果是:out
和var
修飾的參數都是傳址的,區別是out
會對參數進行初始化,而var
則不會。
另外,參數爲對象的情況,實際也是傳址的。
本次發現的問題可能就是使用out
來修飾對象參數導致的,但並沒有進行進一步的測試。
附
測試環境
操作系統:win10
硬盤:SSD
測試結果
-
子碼流預覽抓圖,耗時毫秒級;主碼流預覽抓圖,耗時10+毫秒級
-
預覽抓圖比設備拍圖耗時少得多,設備抓圖在100+毫秒級
-
在相同分辨率情況下,預覽抓圖的文件大小比設備抓圖的略大