读写文件有什么快的办法?对照文件有什么快的办法
读写文件有什么快的办法?对比文件有什么快的办法?
windows下普通的对比两个文件的实现,速度太慢。主要在IO上,CPU占用率很低。
内存映射可以快多少?
读文件如此,写文件是否有快速的办法?
------解决方案--------------------
如果能够一次过把整个文件读入,或者把整个文件写入。那样映射不映射都差不多。
------解决方案--------------------
文件比对,如果只是拿到相同,或者不相同的结果,那么使用计算文件熵值的方法
------解决方案--------------------
4K缓冲区太小,IO次数多,改太点速度会快很多,当然用文件映射更好。
------解决方案--------------------
做内存映射吧,系统会根据你的访问位置,使用经过优化的算法进行数据预缓存,在海量数据存取时,这么做的收益是很明显的。
如果文件较小,建议将其内容一次性读入一块内存中,然后在该内存块里进行操作
------解决方案--------------------
我以前做的一个程序,从数据库读取一个约10M的BLOB字段,一次读4K,耗时3秒,后来改成一次读64K,耗时就只要不到半秒了
------解决方案--------------------
见到你这种答非所问的伪知识
就想爆你的菊花
------解决方案--------------------
比如从硬盘的块大小512字节倍数读写会更快点。
int CmpFiles(const char *szSrcFile, const char *szDestFile)
{
FILE *pFile = fopen(szSrcFile, "rb");
if (NULL==pFile)
{
return -1;
}
FILE *pDestFile = fopen(szDestFile, "rb");
if (NULL==pDestFile)
{
fclose(pFile);
return -1;
}
fseek(pFile, 0, SEEK_SET);
fseek(pFile,0,SEEK_END);
const int iSrcFileLen = ftell(pFile);
fseek(pFile, 0, SEEK_SET);
fseek(pDestFile, 0, SEEK_SET);
fseek(pDestFile,0,SEEK_END);
const int iDestFileLen = ftell(pDestFile);
fseek(pDestFile, 0, SEEK_SET);
if (iSrcFileLen != iDestFileLen)
{
fclose(pFile);
fclose(pDestFile);
return -2;
}
int iSrcReadLen = 0;
int iDstReadLen = 0;
const int iWantReadLen = 4096;
char *szSrcBuf = new char[iWantReadLen];
char *szDestBuf = new char[iWantReadLen];
memset(szSrcBuf, NULL, iWantReadLen);
memset(szDestBuf, NULL, iWantReadLen);
for (int i = 0; i < iSrcFileLen; i += iSrcReadLen)
{
iSrcReadLen = fread(szSrcBuf, 1, iWantReadLen, pFile);
iDstReadLen = fread(szDestBuf, 1, iWantReadLen, pDestFile);
if (iSrcReadLen != iDstReadLen)
{
fclose(pFile);
fclose(pDestFile);
cout<<"Read failed"<<endl;
return -3;
}
if (memcmp(szSrcBuf, szDestBuf, iSrcReadLen))
{
fclose(pFile);
fclose(pDestFile);
cout<<"Not Same at"<<i<<endl;
return -4;
}
}
fclose(pFile);
fclose(pDestFile);
return 0;
}
windows下普通的对比两个文件的实现,速度太慢。主要在IO上,CPU占用率很低。
内存映射可以快多少?
读文件如此,写文件是否有快速的办法?
------解决方案--------------------
如果能够一次过把整个文件读入,或者把整个文件写入。那样映射不映射都差不多。
------解决方案--------------------
文件比对,如果只是拿到相同,或者不相同的结果,那么使用计算文件熵值的方法
------解决方案--------------------
4K缓冲区太小,IO次数多,改太点速度会快很多,当然用文件映射更好。
------解决方案--------------------
做内存映射吧,系统会根据你的访问位置,使用经过优化的算法进行数据预缓存,在海量数据存取时,这么做的收益是很明显的。
如果文件较小,建议将其内容一次性读入一块内存中,然后在该内存块里进行操作
------解决方案--------------------
我以前做的一个程序,从数据库读取一个约10M的BLOB字段,一次读4K,耗时3秒,后来改成一次读64K,耗时就只要不到半秒了
------解决方案--------------------
见到你这种答非所问的伪知识
就想爆你的菊花
------解决方案--------------------
比如从硬盘的块大小512字节倍数读写会更快点。