免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3122 | 回复: 3
打印 上一主题 下一主题

[C++] 在C++里执行system(),移动文件很慢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-03 15:17 |只看该作者 |倒序浏览
以下这段代码,主要是根据向量中的内容把一个文件移动到备份目录下,我测试的时候,单独运行,速度很快,但是放在程序里和其它模块一起跑,速度好像慢了几十倍,现在移一个文件,差不多要1秒钟,郁闷,有3千多的文件,不知等什么时候。
vector<string>::iterator ite_vecfileName;
long fileno;
for(ite_vecfileName=balConfig.m_vecfileName.begin(),fileno=0;
    ite_vecfileName!=balConfig.m_vecfileName.end();
    ite_vecfileName++,fileno++)
{
    if( system(("mv -f " + balConfig.m_inputFilePath + *ite_vecfileName
                + " " + balConfig.m_backFilePath).c_str()) < 0 )
    {
        cout << "出错" << endl;
        theErrorMessages->insert(BALSORT_ERROR_RM_FILE,"mv操作出错:" +
            balConfig.m_inputFilePath + *ite_vecfileName + "!");
        return false;
    }
    cout << "备份标准话单[system] fileno = " << fileno << endl;
}
这三千个文件有4百万多行,程序开始是主要是把它写入内存中,然后跟另外的三千多个文件(同时也写到内存里了)进行对比,估计这时候用了700多MB吧。后来10分钟,对比成功后,我就打算把源文件备份到另一个备份目录下,但是郁闷的是,这时的MV速度实在是太慢了,不知道是什么原因呢?难道是内存不够吗?但是前面跑的速度是很快的,后面运行一些脚本操作也不应该因为物理设备的原因吧。

论坛徽章:
0
2 [报告]
发表于 2006-03-04 03:49 |只看该作者
计费系统?

system要创建一个进程, 开销有点大,
试试把所有mv命令行输入到一个文本文件里, 然后最后system("sh mv.list'), 做一次批处理.

论坛徽章:
0
3 [报告]
发表于 2006-03-04 05:30 |只看该作者
察看以下io

论坛徽章:
0
4 [报告]
发表于 2006-03-05 00:50 |只看该作者

回复 1楼 kewenfeng 的帖子

肯定很慢,移动文件为什么使用system调用UNIX命令呢?移动文件直接使用UNIX C中提供的rename就可以了;
我以前验证过在Ultra60上使用system调用mkdir创建目录以及直接使用UNIX C提供的mkdir;发现system调用创建2000个目录需要33秒,直接使用函数调用只需要1.2秒左右!
system调用需要和操作系统SHELL这样交互一次几乎都是秒级的,如果是高速系统尽量避免使用system调用。

[ 本帖最后由 hkwang66 于 2006-5-13 02:45 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP