我的旧修剪功能:
string TailTrimString (const string & sSource,const char *chars) { size_t End = sSource.find_last_not_of(chars); if (End == string::npos) { // only "*chars" return ""; } if (End == sSource.size() - 1) { // noting to trim return sSource; } return sSource.substr(0,End + 1); }
而不是它我决定使用boost,写下了琐碎的事情:
string TailTrimString (const string & sSource,const char *chars) { return boost::algorithm::trim_right_copy_if(sSource,boost::algorithm::is_any_of(chars)); }
我惊讶地发现新功能的工作速度要慢得多.
我做了一些分析,我发现函数is_any_of非常慢.
boost的实现是否可能比我非常简单的实现慢?有什么我应该使用而不是is_any_of来提高性能?
我还在boost的邮件列表中找到了关于此问题的discussion,但我仍然不确定如何提高代码的性能.
我使用的升级版本是1.38,这是相当古老的,但我想这段代码从那以后没有太大变化.
谢谢.
解决方法
it possible that boost’s implementation works slower than my quite straightforward implementation?
当然.
Is there anything I should use instead of is_any_of in order to improve the performance?
是的 – 你的原始代码.你没有说它有缺陷,或者你使用boost重新实现它的原因.如果原始代码中没有缺陷,则没有合理的理由放弃原始实现.
将Boost引入代码库是有道理的.它带来了许多有用的功能.但是,为了使用新技术的唯一目的而掏空功能是一个很大的新手错误.
编辑:
回应你的评论:
I still don’t understand,why boost’s performance is worse.
旨在为一个特定应用程序执行一项特定作业的手工制作功能通常比通用解决方案更快. Boost是一个很棒的通用工具库,可以节省大量的编程和许多缺陷.但它的通用.您可能只需要以特定方式修剪字符串,但Boost会处理所有内容.这需要时间.