在php中使用std :: vector的性能问题(使用swig)

时间:2017-06-27 11:32:08

标签: php performance vector swig

我在C ++中使用自定义语言解析器,并使用SWIG为PHP和Python创建了一个接口。它将AST暴露回目标语言。 它工作得很好,使用C ++ lib的PHP已经快了30%,但似乎瓶颈是树遍历。 在纯PHP中,打印结果所花费的时间是微不足道的,但是使用C ++库,这是脚本的大部分运行时。 现在我的AST的节点可以有“无限”数量的孩子(n-ary树)。 为了访问子节点,我创建了2个函数

Node* getChild(int i) {
    return self->getChildren().at(i).get();
}

int getNumChildren() {
    return self->getChildren().size();
}

所以PHP中的遍历就像这样

for ($i = 0; $i < $node->getNumChildren(); ++$i)
    doSomething($node->getChild($i));

我一想到它就尝试使用std_vector.i SWIG模板,但它似乎没有帮助。 如果我修改我的代码以便它创建二叉树会有帮助吗?还是我还没有看到另一个问题? 如果需要,我可以提供更多代码。 感谢

编辑:看起来使用C ++ lib遍历的树比使用纯PHP实现(显然使用PHP数组存储子项)慢大约2倍 - 20秒对10秒

0 个答案:

没有答案