Я написал программу, и у меня проблема с производительностью.Узкое место и неправильный код стиля
Узкое эта функция:
void getlinesplit(const char *file, unsigned int &pos, tline &vline)
{
vline.clear();
unsigned int debut_du_mot = 0;
unsigned int i = 0;
while (file[pos+i] != '\n')
{
if (file[pos+i] == '\t')
{
vline.push_back(std::string(file+pos+debut_du_mot,i - debut_du_mot));
debut_du_mot = i+1;
}
++i;
}
vline.push_back(std::string(file+pos+debut_du_mot,i - debut_du_mot));
pos = pos + i+1;
}
Эта функция называется 11 988 400 раз.
vline
- это один и тот же вектор строки, чтобы избежать создания и уничтожения вектора.
Как я могу улучшить эту функцию?
PS: Линия состоит из 1 или 2 слов максимум.
Профите это, я делаю ставку в функции push_back. Вы инициализируете свой вектор с любым размером или используете ли вы по умолчанию? Если вы используете по умолчанию, там должно быть много изменений (и, следовательно, перераспределение) –
Возможно, вы можете посмотреть, откуда это вызывается, и выбрать лучший интерфейс. Возможно, тот, который не связан с построением 'std :: string'. –
@PedroDavid Я использую tline vline; vline.reserve (2); – Fractale