C++ ACE/TAO性能问题

C++ ACE/TAO性能问题,c++,corba,tao,C++,Corba,Tao,ACE/TAO length()函数占用的时间太长。因为它在设置长度时使用新操作符创建了大量内存。任何人都知道交替长度函数,只需在TAO中设置长度 谢谢,来自ATCD邮件列表中的Will Otte: 我猜你有这样的代码: while (something) { CORBA::ULong pos = seq.length (); seq.length (pos+1); seq[pos] = some_value; } 我们观察到,与之相比,性能相当差 std::vecto

ACE/TAO length()函数占用的时间太长。因为它在设置长度时使用新操作符创建了大量内存。任何人都知道交替长度函数,只需在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));
}
std::向量向量向量机;
当(某物){
size_t pos=vec.size();
调整向量大小(位置+1);
vec[pos]=foo(bar);//或者更简洁的vec.push_back(foo(bar));
}
对吧?

答案很可能是因为STL实现可以帮助您解决问题,并在使用resize时提供几何增长。C++标准没有这样的要求(对于调整大小;PurthyBe后后背保证几何增长),所以您可能很幸运,不应该依赖于这种行为。
TAO序列没有为您提供这一点,因此如果您反复调整大小,您将看到性能不佳,因为每次调整大小时,您需要支付分配新缓冲区的费用,以及将所有现存元素复制到新基础缓冲区的时间。

您的详细信息似乎与您的问题标题不匹配。没错……我使用了一个技巧来解决性能问题:seq.length(max_-mable_-length);//直接设置“最大长度”可以消除调整内部循环的性能开销。而(某物){pos+1;seq.length(pos);seq[pos]=some_值;}