小编Mar*_*ler的帖子

使用Boost :: spirit编写的解析器的性能问题

我想解析一个看起来像这样的文件(类似FASTA的文本格式):

    >InfoHeader
    "Some text sequence that has a line break after every 80 characters"
    >InfoHeader
    "Some text sequence that has a line break after every 80 characters"
    ...
Run Code Online (Sandbox Code Playgroud)

例如:

    >gi|31563518|ref|NP_852610.1| microtubule-associated proteins 1A/1B light chain 3A isoform b [Homo sapiens]
    MKMRFFSSPCGKAAVDPADRCKEVQQIRDQHPSKIPVIIERYKGEKQLPVLDKTKFLVPDHVNMSELVKI
    IRRRLQLNPTQAFFLLVNQHSMVSVSTPIADIYEQEKDEDGFLYMVYASQETFGFIRENE
Run Code Online (Sandbox Code Playgroud)

我用boost :: spirit为此编写了一个解析器.解析器正确地存储标题行和下面的文本序列,std::vector< std::pair< string, string >>但是对于较大的文件(对于100MB文件为17秒)需要很长时间.作为比较,我编写了一个没有boost :: spirit(只是STL函数)的程序,只需复制一个100MB文件的每一行std::vector.整个过程不到一秒钟.用于比较的"程序"不符合目的,但我不认为解析器应该花更长的时间......

我知道有很多其他的FASTA解析器,但我很好奇为什么我的代码很慢.

.hpp文件:

#include <boost/filesystem/path.hpp>

namespace fs = boost::filesystem;


class FastaReader {

public:
    typedef std::vector< std::pair<std::string, std::string> > fastaVector;

private:
    fastaVector fV;
    fs::path file;  

public:
    FastaReader(const …
Run Code Online (Sandbox Code Playgroud)

c++ parsing boost boost-spirit-qi c++11

4
推荐指数
4
解决办法
789
查看次数

标签 统计

boost ×1

boost-spirit-qi ×1

c++ ×1

c++11 ×1

parsing ×1