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序列无法为您提供此功能,因此,如果您反复调整大小,将会发现性能不佳,因为每次调整大小时,您都将不得不为分配新缓冲区和复制时间付出代价。所有现有元素到新的基础缓冲区。

10-05 22:54
查看更多