慎用 out

最近需要评估一下海康摄像头不同抓拍方式的性能,以及封装类的可靠性。

在测试过程中,又发现了当初遇见的设备内存抓拍报错的问题。当初排查的结论是:当封装类开启预览的情况下,使用设备抓图有较高概率抓拍失败。由于预览是必需的,最终选择了预览抓拍。

现在,换用lazarus进行测试,发现设备抓图必失败,与是否预览无关。一点点调试,发现直接调用SDK原始方法进行设备抓图正常,使用封装类的设备抓图就不行,那肯定是封装类出了问题。

最终发现,封装类的设备抓图使用了out来修饰参数,参数是TMemoryStreamTJPEGImage对象,尝试去掉out修饰符,然后就一切正常了。

记得很久前专门研究过outvar修饰符的区别,当时查阅的结果是:outvar修饰的参数都是传址的,区别是out会对参数进行初始化,而var则不会。

另外,参数为对象的情况,实际也是传址的。

本次发现的问题可能就是使用out来修饰对象参数导致的,但并没有进行进一步的测试。


测试环境

操作系统:win10

硬盘:SSD

测试结果

  1. 子码流预览抓图,耗时毫秒级;主码流预览抓图,耗时10+毫秒级

  2. 预览抓图比设备拍图耗时少得多,设备抓图在100+毫秒级

  3. 在相同分辨率情况下,预览抓图的文件大小比设备抓图的略大

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