У меня есть много файлов размером менее 64 кб, и мне нужно их преобразовать с кодом ниже.regex работает очень медленно
Вот рабочий код в QT с QRegExp
.
Я попытался переписать его в MSVC с помощью regex_replace
и столкнулся с проблемой очень медленной работы.
интервала QT:
temp.replace(QRegExp("[ ]{0,}(=)[ ]{0,}"), QString("="));
temp.replace(QRegExp("[ ]{0,}(==)[ ]{0,}"), QString("=="));
temp.replace(QRegExp("[ ]{0,}(>)[ ]{0,}"), QString(">"));
temp.replace(QRegExp("[ ]{0,}(<)[ ]{0,}"), QString("<"));
temp.replace(QRegExp("[ ]{0,}(\\&\\&)[ ]{0,}"), QString("&&"));
temp.replace(QRegExp("[ ]{0,}(\\|\\|)[ ]{0,}"), QString("||"));
temp.replace(QRegExp("[ ]{0,}(\\})[ ]{0,}"), QString("}"));
temp.replace(QRegExp("[ ]{0,}(\\{)[ ]{0,}"), QString("{"));
MSVC:
temp = regex_replace(temp, std::regex("[ ]{0,}(=)[ ]{0,}"), "=");
temp = regex_replace(temp, std::regex("[ ]{0,}(==)[ ]{0,}"), "==");
temp = regex_replace(temp, std::regex("[ ]{0,}(>)[ ]{0,}"), ">");
temp = regex_replace(temp, std::regex("[ ]{0,}(<)[ ]{0,}"),"<");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\&\\&)[ ]{0,}"),"&&");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\|\\|)[ ]{0,}"),"||");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\})[ ]{0,}"), "}");
temp = regex_replace(temp, std::regex("[ ]{0,}(\\{)[ ]{0,}"),"{");
Например: std::string
темп (размер ~ 18kb) обрабатываются в течение примерно 10 секунд для каждой строки.
Что возможно, не так?
Какая производительность используется вместо 'Qt'? Я имею в виду, один из них намного лучше другого? Из того, что вы написали, не ясно. – skypjack
Вы пробовали простое регулярное выражение, чтобы проверить, не потребляется ли время автореджером regexp или чтением файлов каким-то неудачным способом? – mvw
@skypjack Я не могу сказать точное время выполнения в QT, но это было так быстро, что я не должен был об этом думать. –