编译器:Microsoft C++ 2005
硬件:AMD 64 位 (16 GB)
提交对 18GB 文件的顺序只读访问,具有以下时序、文件访问和文件结构特征:
18,184,359,164(文件长度)
11,240,476,672(ntfs 压缩文件长度)
时间文件方法盘 14:33?压缩的 fstream 固定磁盘 14:06 正常fstream固定盘 12:22 正常winapi固定盘 11:47 压缩winapi固定盘 11:29 压缩的 fstream ram 磁盘 10:37 压缩的 winapi ram 磁盘 7:18 压缩 7z 存储解压到 ntfs 12gb ram 磁盘 6:37 正常复制到同卷硬盘
fstream 构造函数和访问:
定义缓冲区大小 524288 无符号整数兆字节 = 缓冲区大小; 字符 * 数据缓冲区0;databuffer0 = (char*) malloc (mbytes); datafile.open("drv:/file.ext", ios::in | ios::binary ); datafile.read (databuffer0, mbytes);
winapi构造函数和访问:
定义缓冲区大小 524288 无符号整数兆字节 = 缓冲区大小; const TCHAR* const filex = _T("drv:/file.ext"); 字符 ReadBuffer[BUFFERSIZE] = {0}; hFile = CreateFile(filex, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 如果(假 == ReadFile(hFile,ReadBuffer,BUFFERSIZE-1,&dwBytesRead,NULL)) { ...
对于 fstream 方法,-> 16MB 缓冲区大小不会减少处理时间。对于 winapi 方法,超过 .5MB 的所有缓冲区大小均失败。哪些方法可以优化此实现与处理时间?