VC2015U3上的std :: regex比boost :: regex慢得多

时间:2018-07-24 16:32:01

标签: c++ performance c++11 boost boost-regex

std::wregex EXCEL_CELL_REGEX(L"=\"(.*)\"", std::regex::optimize);
std::wstring text = L"=\"300498\"";
for (int i = 0; i < 981 * 6; i++) {
    std::wsmatch match;
    std::regex_match(text, match, EXCEL_CELL_REGEX);
}

以上代码大约需要 9

boost::wregex EXCEL_CELL_REGEX(L"=\"(.*)\"", boost::regex::optimize);
std::wstring text = L"=\"300498\"";
for (int i = 0; i < 981 * 6; i++) {
    boost::wsmatch match;
    boost::regex_match(text, match, EXCEL_CELL_REGEX);
}

以上代码大约需要 1.5


这些测试基于Debug配置。

您知道为什么std :: regex这么慢吗?如何优化代码?

2 个答案:

答案 0 :(得分:2)

调试执行时间没有用;它们通常与Release版本的实际性能完全脱离。而且,调试时间将完全取决于系统和编译器。

答案 1 :(得分:1)

如果在调试配置中使用增强功能,则会得到很多可能不需要的调试信息。如果您希望以调试模式运行。尝试查找内存和CPU快照以查看瓶颈所在!我建议您使用c ++ 11 clock std lib函数来更精确地测量经过的时间。