好的,所以我正在将二进制文件读入我用 malloc 分配的 char 数组中。(顺便说一句,这里的代码不是实际代码,我只是在现场写出来演示的,所以这里的任何错误可能都不是实际程序中的错误。)这种方法每秒读取大约 5000 万字节。
主要的
char *buffer = (char*)malloc(file_length_in_bytes*sizeof(char));
memset(buffer,0,file_length_in_bytes*sizeof(char));
//start time here
read_whole_file(buffer);
//end time here
free(buffer);
read_whole_buffer
void read_whole_buffer(char* buffer)
{
//file already opened
fseek(_file_pointer, 0, SEEK_SET);
int a = sizeof(buffer[0]);
fread(buffer, a, file_length_in_bytes*a, _file_pointer);
}
我用托管 c++ 编写了类似的东西,我相信它使用文件流和函数 ReadByte() 逐字节读取整个文件,它以每秒大约 5000 万字节的速度读取。
此外,我的计算机中有一个 sata 和一个 IDE 驱动器,我已经从两者中加载了文件,根本没有任何区别(这很奇怪,因为我假设 SATA 读取速度比 IDE 快得多.)
问题
也许你们都可以理解为什么这对我没有任何意义。据我所知,将整个文件读入数组应该比逐字节读取要快得多。最重要的是,通过测试,我发现托管 c++ 速度较慢(只有在您对代码进行基准测试并且需要速度时才会注意到这一点。)
所以
为什么我在这两个应用程序上以相同的速度阅读。5000万字节从一个文件到一个数组是不是很快?
也许我的主板正在瓶颈我?伊瑟,这似乎没有多大意义。
是否有更快的方法将文件读入数组?
谢谢。
我的“脚本计时器”
以毫秒分辨率记录开始和结束时间......最重要的是它不是计时器
#pragma once
#ifndef __Script_Timer__
#define __Script_Timer__
#include <sys/timeb.h>
extern "C"
{
struct Script_Timer
{
unsigned long milliseconds;
unsigned long seconds;
struct timeb start_t;
struct timeb end_t;
};
void End_ST(Script_Timer *This)
{
ftime(&This->end_t);
This->seconds = This->end_t.time - This->start_t.time;
This->milliseconds = (This->seconds * 1000) + (This->end_t.millitm - This->start_t.millitm);
}
void Start_ST(Script_Timer *This)
{
ftime(&This->start_t);
}
}
#endif
读取缓冲区的东西
char face = 0;
char comp = 0;
char nutz = 0;
for(int i=0;i<(_length*sizeof(char));++i)
{
face = buffer[i];
if(face == comp)
nutz = (face + comp)/i;
comp++;
}