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 シーケンスではこれが提供されないため、サイズ変更を繰り返すとパフォーマンスが低下します。これは、サイズ変更のたびに、新しいバッファーの割り当てとコピーの時間を支払う必要があるためです。既存のすべての要素を新しい基礎となるバッファーに。