Я начинающий программист на С++, работающий над небольшим проектом на С++, для которого мне приходится обрабатывать несколько относительно больших файлов XML и удалять из них теги XML. Мне это удалось, используя библиотеку регулярных выражений С++ 0x. Тем не менее, я сталкиваюсь с некоторыми проблемами производительности. Простое чтение в файлах и выполнение функции regex_replace над его содержимым занимает около 6 секунд на моем ПК. Я могу довести это до 2, добавив некоторые флаги оптимизации компилятора. Однако, используя Python, я могу сделать это менее 100 миллисекунд. Очевидно, что я делаю что-то очень неэффективное в своем коде на С++. Что я могу сделать, чтобы немного ускорить это?
Мой код на С++:
std::regex xml_tags_regex("<[^>]*>");
for (std::vector<std::string>::iterator it = _files.begin(); it !=
_files.end(); it++) {
std::ifstream file(*it);
file.seekg(0, std::ios::end);
size_t size = file.tellg();
std::string buffer(size, ' ');
file.seekg(0);
file.read(&buffer[0], size);
buffer = regex_replace(buffer, xml_tags_regex, "");
file.close();
}
Мой код Python:
regex = re.compile('<[^>]*>')
for filename in filenames:
with open(filename) as f:
content = f.read()
content = regex.sub('', content)
P.S. Мне все равно не нужно обрабатывать полный файл сразу. Я просто обнаружил, что чтение файла по строкам, слово за словом или символом персонажа значительно замедлило его.