std::regex 在 VC2015U3 上比 boost::regex 慢很多
std::regex is much slower than boost::regex on VC2015U3
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 秒
这些测试基于调试配置。
你知道为什么 std::regex 这么慢吗?如何优化代码?
如果您在调试配置中使用 boost,您将获得很多可能不需要的调试内容。如果您希望 运行 处于调试模式。尝试查找内存和 CPU 快照以查看瓶颈所在!我建议您使用 c++11 clock std lib 函数来更精确地测量经过的时间。
调试执行时间没用;它们通常与发布版本的实际性能完全脱节。此外,调试时间将非常依赖于系统和编译器。
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 秒
这些测试基于调试配置。
你知道为什么 std::regex 这么慢吗?如何优化代码?
如果您在调试配置中使用 boost,您将获得很多可能不需要的调试内容。如果您希望 运行 处于调试模式。尝试查找内存和 CPU 快照以查看瓶颈所在!我建议您使用 c++11 clock std lib 函数来更精确地测量经过的时间。
调试执行时间没用;它们通常与发布版本的实际性能完全脱节。此外,调试时间将非常依赖于系统和编译器。