这段代码有啥问题嘛?程序猿一直没看出问题来
- 我好像是小号如题目。。。。就是保存图片嘛,现在是设置成最多保存10张图片,超过10张就删除一张保存一张。这样就不会慢。
如果我保存一百张或者几千张,就会越来越慢,可以慢好几秒,夸张的不行。
是SSD哎。
程序猿好几个月了,实在找不出问题在哪里
没办法,只能求助一下各位了,人多力量大,当局者迷旁观者清嘛复制代码- //save ok marked image and respectly model image
- QString date = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss_zzz");
- {
- QString path = QString("%1/history/camera%2/ok-%3/okpicture")
- .arg(QDir::currentPath())
- .arg(i + 1).arg(checkId() - 1);
- QDir dir(path);
- if(!dir.exists())
- dir.mkpath(path);
- QString fileName = QString("%1/%2.jpg").arg(path)
- .arg(date);
- bool save_ok = cv::imwrite(fileName.toStdString(), source);
- if(!save_ok){
- Utils::record->insertOperation("OK图片保存失败");
- cv::imwrite(fileName.toStdString(), source);
- }
- QFileInfoList flist = dir.entryInfoList(QStringList() << "*.jpg" << "*.bmp", QDir::Files | QDir::NoDotAndDotDot, QDir::Time);
- if(flist.size() > MAX_OK_COUNT){
- QFile::remove(flist.back().absoluteFilePath());
- }
- }
iOS fly ~ - //save ok marked image and respectly model image
- xfygxlinux system? 目录有一个用于遍历文件的file entry list,目录使用的越久(增删),这个list就越大。你可以用 ls 看一下目录的大小(不含目录内文件),是不是很大?很大就是慢的原因。
- 我好像是小号
- 我好像是小号打印测试过,遍历文件不慢。图片很多的时候,好像是保存慢
- 我好像是小号这个我之前测试上千个文件也很快的
- chykey又来白嫖了?
- wsyx87930我愿称你为地板白嫖小王子
- 痴汉其实楼主比那些个整天发政治贴带风向的id好多了
至少帖子能让人动动脑
- 我好像是小号
- 浊水桥楼主真把这里当stackflow了啊
- tsounny楼主又来白嫖啊,你这是白嫖成性的节奏。
- badloopssd有缓存 你这么写十张还不到落盘的时候 所以不卡 写多了就要开始落盘了 读写速度跟不上 iOS fly ~
- 我好像是小号经过打印测试,遍历文件夹,就算几千张图片速度很快。几百上千图片之后,慢好像是慢在保存上面。奇怪了,
- 2016102建议小号白嫖的同时,写写工作总结,也回馈一下后来的从业者。
- 我好像是小号
比如?文化水平不行哎,下笔没有神
- wwwEaglestackoverflow
- 我好像是小号难怪我百度不出来stackflow
- suifeng123运行的时候查看一下内存占用看看?
另外,保存过的文件都关闭了吧? - znm看起来和磁盘相关,Linux 读写大量小文件导致,
说本地磁盘么?
可能要优化下磁盘或者写入方式 iOS fly ~ - alvise不要建在一个文件夹里面,分开保存....
你在linux里面用的什么分区格式 - 猪猪代购cv是啥类的对象
- 我好像是小号opencv
- 我好像是小号
- am99如果这个函数是高频调用的那应该仅保留必要的功能在里面,
比如,flist可以在loop之前从存储读取,此后都可以以变量形式在内存中维护。
如果这个目录是多进程同时在处理的话那么上面的方法无效,但是可以新开个进程专门处理目录中删图的操作。
又,你在用CV?是不是在读视频流?必须异步多进程消息队列。否则视频帧和磁盘保存在同以进程里相互等待会阻塞,简单的表象就是12:00打开程序,12:10时你刚刚存下的图片可能是12:08产生的,还有一堆视频帧在内存中拥堵着 - 我好像是小号每次执行都要保存图片,应该算高频调用,经过打印测试,遍历文件夹,就算几千张图片速度很快。几百上千图片之后,慢好像是慢在保存上面。奇怪了,
- am99回复27#我好像是小号
又,你在用CV?是不是在读视频流?必须异步多进程消息队列。否则视频帧和磁盘保存在同以进程里相互等待会阻塞,简单的表象就是12:00打开程序,12:10时你刚刚存下的图片可能是12:08产生的,还有一堆视频帧在内存中拥堵着 - 退休工人不懂,帮号弟顶一下。
- 猪猪代购
- 猪猪代购另外,可以试试保存成png格式,用CV_IMWRITE_PNG_COMPRESSION = 3.
- ipzh你们把楼主都说蒙了。
这样吧,楼主你出点血,d版肯定有高手能解决。 - 我好像是小号
- liuzhedash单线程肯定慢啊,opencv转换图片本来就耗cpu,先把要处理的图片路径读到一个Vector<String>里,然后起N个进程各拿一部分去处理。
- ipzh上面给你提了几个思路:
1、Linux文件系统文件数量 的问题,文件太多,导致写入慢
2、IO慢,可以考虑多线程或者异步方式解决
3、写日志,加profile,看哪个地方执行耗时
大家只能给你一个思路,具体的代码就是具体解决。 - 我好像是小号单线程慢?百思不得其解的问题就是,如果我程序改成10张,就不会慢了。如果我设置成最多可以保存几百张或者几千几万张。那么就会越来越慢。但是总共保存10,超过10张就是删除最开始第一张,然后保存,如此循环。 如果设置成1000张,那就是超过1000张就是删除最开始第一张,然后保存,如此循环。
好像都是单线程哎。 - 我好像是小号回复30#猪猪代购
亲爱的网友你好,刚刚程序猿把图片全部改成多线程保存了,果然就不会变了,但是程序猿表示不理解,用多线程为啥会快这么多,图片多也没有影响,他说他在Windows系统的时候从来不要用多线程这种方式要保存。 iOS fly ~ - 我好像是小号回复34#liuzhedash
亲爱的网友你好,刚刚程序猿把图片全部改成多线程保存了,果然就不会变了,但是程序猿表示不理解,用多线程为啥会快这么多,图片多也没有影响,他说他在Windows系统的时候从来不要用多线程这种方式要保存。 iOS fly ~ - gj91找人家干活给钱,上d版提问免费,是这个思路不…?
- 猪猪代购
- 我好像是小号
- 猪猪代购7-8年了,这点还没明白。真的不行
- 我好像是小号
- gj91
- 猪猪代购如果只保存文件,cpu是闲着的,瓶颈就是磁盘io速度。
因为cv的保存还有图像压缩计算,cpu是跑满的了。
所以,单线程只能用一个核,多线程用多个核一起压缩图片 - 猪猪代购
- 我好像是小号
- smalltintin看破不说破,人生真谛
- gj91
- 我好像是小号回复44#gj91
人家可能技术差了一点,但是兼职工作态度很不错的,加班回来,晚上十点多了,还能帮忙改需求改到12点多,急的时候,可以早上六点爬起来,改到八点,然后去上班可以先改完需求,再谈钱。 iOS fly ~