求助分析计算文件md5的程序

我看你有戏 2015-09-20 12:21:50
这是下载地址
http://pan.baidu.com/s/1eQfNx1g


有个问题,就是这个软件计算大文件速度也很快,而且我看了下内存也只有1M多点

IO读取速度很快,按理说是每次读一块数据去计算MD5,请问这种读取是如何实现的,貌似没有占用多余的内存

string FileDigest(const string &file) {

ifstream in(file.c_str(), ios::binary);
if (!in)
return "";

streampos pos = in.tellg(); // save current position
in.seekg(0, ios::end);
cout << "file length =" << (unsigned long)in.tellg() << endl;
unsigned long dwLen = in.tellg();
in.seekg(pos); // restore saved position

unsigned long dwLenDon = 0;
MD5 md5;
std::streamsize length;
//char buffer[1024000];
char* buffer = new char[1024*1024*100];
while (!in.eof()) {
in.read(buffer, 1024*1024*100);
length = in.gcount();
if (length > 0)
md5.update(buffer, length);

dwLenDon+=length;


cout<< "完成率:" << dwLenDon*100/dwLen<<endl;

}
in.close();
return md5.toString();
}



这是我写的小程序,小文件还好,大型文件就慢了
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2015-09-21
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
使用内存映射文件可以减少缓冲区拷贝,提高访问文件的效率。而 MD5 算法本身也是可以优化提高速度的。 你要做优化,先测试那部分影响你的效率了,再针对那一部分做。
嗯用到的是内存映射的技术,谢谢了,这个功能太好了,这种读取方式很先进,特别是几个G的数据,爽
www_adintr_com 2015-09-20
  • 打赏
  • 举报
回复
使用内存映射文件可以减少缓冲区拷贝,提高访问文件的效率。而 MD5 算法本身也是可以优化提高速度的。 你要做优化,先测试那部分影响你的效率了,再针对那一部分做。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧