ACE/TAO 性能问题

ACE/TAO Performance Issue

ACE/TAO length() 函数花费太多时间。因为它在设置长度时使用 new 运算符创建了那么多内存。任何人都知道长度函数的替代方法只是在 TAO 中设置长度。

谢谢,

来自 ATCD 邮件列表的 Will Otte: 我猜你有这样的代码:

while (something) {
    CORBA::ULong pos = seq.length ();
    seq.length (pos+1);
    seq[pos] = some_value;
}

并且观察到与

相比性能非常差
std::vector<foo> vec;
while (something) {
    size_t pos = vec.size ();
    vec.resize (pos + 1);
    vec[pos] = foo (bar);  // or the much more succinct vec.push_back (foo (bar));
}

对吗?

答案很可能是因为您的 STL 实现正在帮助您解决问题并在您使用调整大小时提供几何增长。 C++ 标准没有任何类似的要求(对于调整大小;push_back 保证按几何级数增长),所以您可能很幸运,不应该依赖于这种行为。

TAO 序列不为您提供此功能,因此如果您反复调整大小,您将看到性能不佳,因为每次调整大小时,您都将不得不为新缓冲区的分配付出代价以及将所有现存元素复制到新的底层缓冲区的时间。