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