Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Edynchik от Июнь 26, 2013, 16:38



Название: QByteArray & append ( const char * str, int len ) медленный
Отправлено: Edynchik от Июнь 26, 2013, 16:38
Добрый вечер. Столкнулся с такой проблемой, QByteArray & append ( const char * str ) выполняется достаточно быстро, а QByteArray & append ( const char * str, int len ) не особенно. Наверное связано с тем чтог в первом случае создается только ссылка, а во втором глубокое копирование...не знаю. Есть альтернативы побыстрее? Спасибо.


Название: Re: QByteArray & append ( const char * str, int len ) медленный
Отправлено: Old от Июнь 26, 2013, 16:45
Добрый вечер. Столкнулся с такой проблемой, QByteArray & append ( const char * str ) выполняется достаточно быстро, а QByteArray & append ( const char * str, int len ) не особенно. Наверное связано с тем чтог в первом случае создается только ссылка, а во втором глубокое копирование...не знаю. Есть альтернативы побыстрее? Спасибо.
Не вижу, где второй вариант может заметно тормозить, по сравнению с первым.

Код
C++ (Qt)
QByteArray& QByteArray::append(const char *str)
{
   if (str) {
       int len = qstrlen(str);
       if (d->ref != 1 || d->size + len > d->alloc)
           realloc(qAllocMore(d->size + len, sizeof(Data)));
       memcpy(d->data + d->size, str, len + 1); // include null terminator
       d->size += len;
   }
   return *this;
}
 
QByteArray &QByteArray::append(const char *str, int len)
{
   if (len < 0)
       len = qstrlen(str);
   if (str && len) {
       if (d->ref != 1 || d->size + len > d->alloc)
           realloc(qAllocMore(d->size + len, sizeof(Data)));
       memcpy(d->data + d->size, str, len); // include null terminator
       d->size += len;
       d->data[d->size] = '\0';
   }
   return *this;
}
 


Название: Re: QByteArray & append ( const char * str, int len ) медленный
Отправлено: Edynchik от Июнь 26, 2013, 18:37

Не вижу, где второй вариант может заметно тормозить, по сравнению с первым.

ну как бы из личных наблюдений, в разы...в первом случае складывается порядка 100 пачек за секунду, а во втором 8...по времени очень похожа на QByteArray fromRawData ( const char * data, int size )


Название: Re: QByteArray & append ( const char * str, int len ) медленный
Отправлено: xokc от Июнь 27, 2013, 08:22
Судя по тому, что код методов отличается лишь d->data[d->size] = '\0', вряд ли эта строка приводит к такой разнице в производительности в десятки раз. Причина в чем-то другом.