Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过优化读取文件并存储在缓冲区中_C++_Algorithm_Buffer_File Handling_Binaryreader - Fatal编程技术网

C++ 如何通过优化读取文件并存储在缓冲区中

C++ 如何通过优化读取文件并存储在缓冲区中,c++,algorithm,buffer,file-handling,binaryreader,C++,Algorithm,Buffer,File Handling,Binaryreader,我有一个包含字符串的大文件。我必须读取这个文件并用C或C++存储在缓冲区中。我试着这样做: FILE* file = fopen(fileName.c_str(), "r"); assert(file != NULL); size_t BUF_SIZE = 10 * 1024 * 1024; char* buf = new char[BUF_SIZE]; string contents; while (!feof(file)) { int ret = fread(buf, BUF_SIZ

我有一个包含字符串的大文件。我必须读取这个文件并用C或C++存储在缓冲区中。我试着这样做:

FILE* file = fopen(fileName.c_str(), "r");
assert(file != NULL);
size_t BUF_SIZE = 10 * 1024 * 1024;
char* buf = new char[BUF_SIZE];
string contents;
while (!feof(file))
{
    int ret = fread(buf, BUF_SIZE, 1, file);
    assert(ret != -1);
    contents.append(buf);
}
文件中的数据将是字符串,我必须找到具有最大频率的字符。
有没有可能对代码进行更多的优化?使用BinaryReader会改进优化吗?如果你知道的话,你能分享更多的方法吗?

你不能在C中使用
new
,改为
malloc
,看看我想OP已经在这里问了一个类似的问题-@Nishant-thansk征求意见,但很抱歉,请阅读这个问题,这是如何以OPTM方式读取文件并存储在缓冲区中?不是如何找到字符串的频率。“我必须读取这个文件并在C或C++中存储缓冲区。”-为什么?如果你的最终目标仅仅是“找到频率最高的角色”,这是非常不可取的。。。最好将块读取到一个合适但大小不太大的缓冲区(例如16k),处理其中的数据以更新频率计数器,然后将下一个块读取到同一个缓冲区。“更新频率计数器”的逻辑与您的问题Nishant链接的逻辑基本相同。C++标准库没有“BinaryReader”-请在提到其他函数时命名库。@马珂:“使用更多线程读取文件,如果硬件有一个以上的内核,肯定会更快”——肯定是错误的;有时可能会出现这种情况,例如,当文件内容位于条带化RAID阵列上,并且许多物理磁盘可以提供数据时,但通常速度较慢,因为单个磁盘驱动程序从一个线程的读取位置反复拉到另一个线程的读取位置,从而减少了流式传输实际数据的时间。