我正在解析一个大型CSV文件(~450 MB)。解析器基于ifstream
和getline
。这非常有效,但需要一些时间。为了减少时间,我尝试将CSV文件的压缩版本(~21 MB)读入istringstream
并使用相同的解析器。但是,使用ifstream或istringstream时,解析器需要相同的时间。根据我的理解,当使用istringstream时,解析器应该更快,因为内容已经缓存在内存中。
这是一些伪代码:
ifstream file(filename)
istream* filePointer = &file
if(gz file) {
read file into string
decompress string
create istringstream from decompressed string
set filePointer to istringstream
}
parse(filePointer)
---
void parse(istream* file) {
// ...
while(getline(*file, line)) {
// ...
}
}
表现结果:
这是正常的行为吗,istringstream
并不比使用ifstream
同时阅读和解析文件更快?
答案 0 :(得分:0)
正如您在性能结果中所述,解析时间是不变的,因此,两种方法读取文件的速度都比解析时快。因此,速度瓶颈就是解析本身,并且更快地读取文件对性能没有帮助。如果您想进一步优化代码,则需要对解析器执行某些操作。