频繁的调用fwrite等IO函数会使得程序执行很慢,使用内存缓存进行加速是一种有效的方法。
14年在进行一项开发任务时,由于需要写入几十GB的文件,苦于执行效率,就使用了缓存技术,效果还蛮好。
由于最近要用到,就分享一下吧(虽然这个可能百度出来都是一大片~)。
直接贴代码,使用了16MB的缓存,具体使用多大的缓存是不固定的,自己根据实际项目需要有所调整。
#include "stdafx.h"
#include <iostream>
#include <time.h>
typedef unsigned char uchar;
#define USING_CACHE
int _tmain(int argc, _TCHAR* argv[])
{
FILE * fp = fopen("test", "wb");
const int unit_size = sizeof(int);
long sp, ep;
#ifdef USING_CACHE
const unsigned int cacheSize = 16000000; //16mB缓存
uchar * cache = (uchar *)malloc(cacheSize);
int CachePtr = 0;
#endif
sp = clock();
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 10000; j++)
{
#ifdef USING_CACHE
*(int *)(cache + CachePtr) = j; //写入缓存
CachePtr += unit_size; //缓存地址
if (CachePtr == cacheSize) //缓存写满时需要写入内存
{
fwrite(cache, 1, cacheSize, fp);
CachePtr = 0;
}
#else
fwrite(&j, 1, unit_size, fp);
#endif
}
}
ep = clock();
printf("Cost %d ms", ep - sp);
getchar();
return 0;
}
实验结果(单位:ms):
是否使用缓存 | DEBUG | RELEASE |
是 | 449 | 260 |
否 | 6333 | 6073 |