ACE/TAO 性能问题

ACE/TAO Performance Issue

本文关键字:问题 性能 TAO ACE      更新时间:2023-10-16

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 序列不会为您提供此功能,因此,如果您反复调整大小,您将看到性能不佳,因为每次调整大小时,您都必须支付新缓冲区的分配费用,以及将所有现有元素复制到新基础缓冲区的时间。