Cfile.flush(),高速写文件
Cfile.flush(),快速写文件
我向一个txt文件中写一个数组:bufferarray,大小为6000字节
cfile file;
file.Open(_T("c:/test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
UCHAR bufferarray [60][100]={0};
for (int i=0;i<60;i++)
{
for (int j=0;j<100;j++)
{
bufferarray[i][j]=temp++;
}
}
file.Write(bufferarray,sizeof(bufferarray));
file.Flush();
经过测试,如果加上file.Flush();时间要用60-70ms,有时会超过100ms,如果不加file.Flush();这个过程连1ms都用不上,从结果上看,不加file.Flush();内容也被写入了文件,加不加file.Flush();结果都一样。
我想问一下为什么二者的时间会差别这么大?,flush可不可以不用?如果不用会出什么错?为什么我没用flush也会数据也会被写入文件?
最后向各位请教:在各种写文件的方法中,用什么函数或方法能够做到速度最快,我想在最快的时间内将数据写入文本文件,最大上限是70ms写6k个数据?
分数不够了,只有20分了,如果以后挣来分数一定会补的。
------解决方案--------------------
CFile::Flush()
Forces any data remaining in the file buffer to be written to the file.
不用这个也可以你调用CFile::Close()也会将数据写入磁盘文件中。
------解决方案--------------------
Flush是将缓冲区的内容写入文件,并清空。缓冲区是4k的内容,够4k了,就会自动写入文件,不够的话就需要flush一下,如果不flush的话,文件的最后有可能会少一些内容
------解决方案--------------------
你把flush改为close试试,耗时应该和加flush一样的。
如果你退出程序时不close也不flush,虽然很快就退出来了(也不会有问题),但完了之后,操作系统还要忙一阵子(为你收拾残局),所以你不加flush和close的快是表面现象,我觉得。
------解决方案--------------------
flush()的作用是强制将缓冲区的数据写入磁盘,只是为了确保数据尽快被写入,但是其实如果小量数据就用flush(),那么硬盘写入的机械操作时间是相对比较长的,
如果不调用flush(),缓冲区达到一定的数据量就会自动写入磁盘。
在关闭文件的时候也会把缓冲区的数据(如果有)强制写入磁盘。
我向一个txt文件中写一个数组:bufferarray,大小为6000字节
cfile file;
file.Open(_T("c:/test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
UCHAR bufferarray [60][100]={0};
for (int i=0;i<60;i++)
{
for (int j=0;j<100;j++)
{
bufferarray[i][j]=temp++;
}
}
file.Write(bufferarray,sizeof(bufferarray));
file.Flush();
经过测试,如果加上file.Flush();时间要用60-70ms,有时会超过100ms,如果不加file.Flush();这个过程连1ms都用不上,从结果上看,不加file.Flush();内容也被写入了文件,加不加file.Flush();结果都一样。
我想问一下为什么二者的时间会差别这么大?,flush可不可以不用?如果不用会出什么错?为什么我没用flush也会数据也会被写入文件?
最后向各位请教:在各种写文件的方法中,用什么函数或方法能够做到速度最快,我想在最快的时间内将数据写入文本文件,最大上限是70ms写6k个数据?
分数不够了,只有20分了,如果以后挣来分数一定会补的。
------解决方案--------------------
CFile::Flush()
Forces any data remaining in the file buffer to be written to the file.
不用这个也可以你调用CFile::Close()也会将数据写入磁盘文件中。
------解决方案--------------------
Flush是将缓冲区的内容写入文件,并清空。缓冲区是4k的内容,够4k了,就会自动写入文件,不够的话就需要flush一下,如果不flush的话,文件的最后有可能会少一些内容
------解决方案--------------------
你把flush改为close试试,耗时应该和加flush一样的。
如果你退出程序时不close也不flush,虽然很快就退出来了(也不会有问题),但完了之后,操作系统还要忙一阵子(为你收拾残局),所以你不加flush和close的快是表面现象,我觉得。
------解决方案--------------------
flush()的作用是强制将缓冲区的数据写入磁盘,只是为了确保数据尽快被写入,但是其实如果小量数据就用flush(),那么硬盘写入的机械操作时间是相对比较长的,
如果不调用flush(),缓冲区达到一定的数据量就会自动写入磁盘。
在关闭文件的时候也会把缓冲区的数据(如果有)强制写入磁盘。