ZBLOG

while(!m_abort) { ImageInfo info; if(m_imgInfoList.size()) { m_mutexImgInfoList.lock(); if(m_imgInfoList.size()) { info = m_imgInfoList.takeFirst(); } m_mutexImgInfoL...

要在机械硬盘存储下优化您的代码,以达到 10ms 的执行时间,您可以考虑以下几个方面:

1. 减少锁的开销

如果可能,尽量减少对 m_mutexImgInfoList 的锁定。您可以先检查 m_imgInfoList.size() 是否大于零,然后再进行锁定,并确保在最小范围内使用锁。

  1. if (!m_abort && !m_imgInfoList.isEmpty()) {
  2. m_mutexImgInfoList.lock();
  3. if (!m_imgInfoList.isEmpty()) {
  4. info = m_imgInfoList.takeFirst();
  5. }
  6. m_mutexImgInfoList.unlock();
  7. // 检查info.mat2D是否为空
  8. ...
  9. }

2. 使用缓存机制

如果保存过程比较耗时,可以考虑引入一个缓冲区,将多个图像数据合并后一起写入文件,而不是每次都单独写入。例如,可以每处理一定数量的图像后再调用 imwrite() 保存到磁盘,这样可以有效地减少I/O操作的次数。

3. 调整图像格式和质量参数

调整保存图像的格式或质量参数,例如将 JPEG 的质量设置为较低(例如 75),以减小文件大小,提高保存速度,但注意这会影响最终图像的质量。

4. 图像压缩和解压方式

如果可行的话,考虑使用其他更快速的库或算法来进行图像的压缩和保存。例如,有些库对于某些格式可能会有更快的实现。

5. 异步处理

将图片保存操作放到另一个线程中异步进行。这将使主线程不被阻塞,继续处理其他任务。

示例:

  1. // 在 Worker 类中
  2. void saveImageAsync(const ImageInfo &info) {
  3. QString savePath;
  4. if (IMAG_JPG == info.imageType) {
  5. savePath = info.imgPath + "/" + info.imgNo + ".jpg";
  6. } else if (IMAG_BMP == info.imageType) {
  7. savePath = info.imgPath + "/" + info.imgNo + ".bmp";
  8. } else {
  9. savePath = info.imgPath + "/" + info.imgNo + ".jpg";
  10. }
  11. QDateTime start = QDateTime::currentDateTime();
  12. cv::imwrite(savePath.toStdString(), info.mat2D); // Save in a separate thread
  13. qint64 elapsed = start.msecsTo(QDateTime::currentDateTime());
  14. qDebug() << "Save time:" << elapsed << "ms";
  15. }

然后在循环中调用该函数:

  1. while (!m_abort) {
  2. ImageInfo info;
  3. if (!m_imgInfoList.isEmpty()) {
  4. ...
  5. // 使用新线程异步保存图像
  6. QtConcurrent::run(&saveImageAsync, info);
  7. }
  8. QThread::usleep(1);
  9. }

6. I/O 优化

确保您的 I/O 操作在高效状态下工作,如确保不受磁盘碎片影响,以及适当配置操作系统以优化文件读写性能。如果多次连续写同一目录,尽量避免频繁创建、删除文件夹等。

通过这些方法结合实际场景逐渐优化,你应该能够降低整体耗时,接近目标。在实现之前,请确保做好充分测试,以验证各项改动带来的影响。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22023

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?