2015-01-28 2 views
1

Функция ACE/TAO length() занимает слишком много времени. Поскольку он создает такой объем памяти, используя новый оператор во время установки длины. Кто-нибудь знает альтернативу функции длины, просто устанавливая длины в TAO.ACE/TAO Performance Issue

Спасибо,

+1

Ваших данных, кажется, не соответствуют вашему вопросу названия – Kevin

+0

mistaken..changed – user1079341

ответ

1

От Уилла 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 не предоставляют это для вас, поэтому, если вы неоднократно изменяете размер, вы увидите низкую производительность, потому что каждый раз, когда вы изменяете размер, вам придется заплатить за выделение нового буфера и время для копирования всех существующих элементов в новый базовый буфер.

+0

Да Вот так ... я использовал одну хитрость, чтобы избавиться от проблем с производительностью: seq.length (max_possible_length); // установка максимальной длины из первых рук удаляет служебные служебные данные с изменением размера внутри цикла. while (something) { pos + 1; seq.length (pos); seq [pos] = some_value; } – user1079341