现在我正在使用C ++ 11:
long long int linecount;
fileifstream.open( filepath );
if( std::getline( fileifstream, newline ) )
{
linecount += 1;
// do some stuff with line and throw it out
}
fileifstream.close();
我会尝试使用此C getline()
,但在Windows(Visual Studio cl.exe
编译器)下不可用:
FILE * ifile = fopen( filename, "r" );
size_t linesz = 0;
char * line = nullptr;
unsigned int linecount = 0;
while( getline( &line, &linesz, ifile ) > 0 )
{
linecount++;
// do some stuff with line and throw it out
}
free( line );
std::cout << "Lines count: " << linecount << std::endl;
fclose(ifile);
在单独读取/处理每一行时,可以更快地读取文件中的行(即,使用其他标准实现的时间更少),而不必一次将整个文件加载到内存中(假设10GB数据)文件放在具有8GB RAM的计算机上)?
文件的最大大小是否存在已知限制?
否,该文件可以具有1MB或40GB。整个文件不必在内存中,一次只需要一行。但是,您不仅可以读取一行(以块为单位?),还可以读取1GB或更多的内容。
如果有N个CPU,则您希望能够并行处理“最多N个”文件,而正在读取下N个文件。
我将假设仅是一个线程应用程序/算法,因为该文件需要按行进行解析,并且要同步所有这些线程以免彼此陷入中间并不容易,并且需要真正复杂的实现。 / p>
还请注意,最大性能(尤其是文件已经被操作系统缓存在RAM中或位于快速SSD上时);
文件未缓存在RAM中。 RAM是免费的,文件需要来自文件系统并由行进行解析。
相关:
如评论中所述,有getline自定义实现可以试用: