Функция ACE / TAO length () отнимает слишком много времени. Так как он создает столько памяти, используя новый оператор во время установки длины. Кто-нибудь знает функцию, альтернативную длине, для установки длин в TAO.
Спасибо,
От Will Otte из списка рассылки ATCD:
Я собираюсь догадаться, что у вас есть такой код:
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 не обеспечивают это для вас, поэтому, если вы неоднократно изменяете размер, вы увидите низкую производительность, потому что каждый раз, когда вы изменяете размер, вам придется платить за выделение нового буфера и время для копирования. все существующие элементы в новый базовый буфер.