如何在使用了BOOST_REGEX_MATCH_EXTRA情况下提高boost::regex_search的执行速度
2010-04-14 16:15
363 查看
首先,请注意我使用了BOOST_REGEX_MATCH_EXTRA这个宏来捕获多个子表达式,具体功能请参考:http://www.cppprog.com/boost_doc/libs/regex/doc/html/boost_regex/captures.html。
其中描述到: 激活这个特性会造成性能影响(即使你不使用),如果你使用就会有更大的影响。
事实也确实如此,我写了一个程序来提取cpp文件中所有的函数原型,如:
A.cpp文件中有:
void A::Func1()
{
....
}
void A::Func2(int i)
{
....
}
void A::Func2(int i, A& a)
{
....
}
将此文件输入程序后所得到的结果是:
void A::Func1()
void A::Func2(int i)
void A::Func2(int i, A& a)
我的代码如下(仅列出主要部分):
我测试的是1300多行的cpp文件,当加上“smatch tmp; what = tmp;”后,性能提升了“无穷倍”,因为没有这两行,我不知道要等到什么时候,而加了后就执行了2s多。原因我估计是内部状态机的问题,但尚需深入研究后确定。
其中描述到: 激活这个特性会造成性能影响(即使你不使用),如果你使用就会有更大的影响。
事实也确实如此,我写了一个程序来提取cpp文件中所有的函数原型,如:
A.cpp文件中有:
void A::Func1()
{
....
}
void A::Func2(int i)
{
....
}
void A::Func2(int i, A& a)
{
....
}
将此文件输入程序后所得到的结果是:
void A::Func1()
void A::Func2(int i)
void A::Func2(int i, A& a)
我的代码如下(仅列出主要部分):
void Parser::Run() { regex r("(((//w+::)*)(//w+)[&*//^]?)//s+(//w+::)*(//w+)//(//s*((((//w+::)*(//w+)//s*[&*//^]?)//s*(//w+)//s*,//s*)*((//w+::)*(//w+)//s*[&*//^]?)//s*(//w+))?//s*//)//s*//{"); smatch what; match_flag_type flags = boost::match_extra ; string::const_iterator start, end; start = m_content.begin(); end = m_content.end(); while(regex_search(start, end, what, r, flags)) { ... start = what[0].second; // 下面两行是提升性能的关键 smatch tmp; what = tmp; } }
我测试的是1300多行的cpp文件,当加上“smatch tmp; what = tmp;”后,性能提升了“无穷倍”,因为没有这两行,我不知道要等到什么时候,而加了后就执行了2s多。原因我估计是内部状态机的问题,但尚需深入研究后确定。
相关文章推荐
- 使用boost::regex_search进行字符串提取
- 如何使用js懒加载图片|如何使用jquery.lazyload.js|网页优化|如何提高网页加载速度
- 从浏览者访问网页的流程来看如何提高系统反应速度(2)--服务端网页的执行
- 如何使用索引提高查询速度
- Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!
- 如何提高asp的SQL的执行效率提高数据库读取速度
- 如何使用索引提高查询速度
- 使用ajaxcontroltoolkit时如何提高响应速度和阻止timeout
- 如何使用索引提高查询速度
- 使用内存数据库/数据集以提高执行速度
- 使用Gearman提高自动化运维的远程执行速度
- mysql 使用 group by和 order by 时extra 的执行情况
- 如何使用js懒加载图片|如何使用jquery.lazyload.js|网页优化|如何提高网页加载速度
- 如何使用索引提高查询速度
- vc如何使用三角函数的模版时提高运算速度
- Win8如何使用软件让内存虚拟硬盘提高电脑运行速度
- 如何在Open C/C++应用中使用Boost.Regex
- 使用boost::regex_search进行字符串提取
- 如何使用索引提高查询速度
- 如何使用索引提高查询速度