我正在使用rapidxml在C ++中阅读巨大的XML文件并尝试优化阅读,因为该部分大部分时间都在消耗(我用std::chrono
进行了测量)。
即。我有一个大约40 MB的XML文件 - 来自rapidxml的实际解析只需要大约。 ~2300毫秒(绝对精细)。但是将文件从std::ifstream
复制到缓冲区大约需要30000毫秒。我想知道瓶颈是否是我硬盘的速度,或者我是否可以做任何事情来保存缓冲区副本。
std::ifstream file(filename);
if(file == nullptr){
throw std::runtime_error("File "+filename+" not found!");
}
rapidxml::xml_document<> doc;
std::vector<char> buffer((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>( ));
buffer.push_back('\0');
doc.parse<0>(&buffer[0]);
rapidxml::xml_node<>* root = doc.first_node();
问题是行:std::vector<char> buffer((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>( ));
,在40MB文件上大约需要30秒。
如何在这里优化阅读?