Быстрая конкатенация (суммирование) больших строк в Lazarus

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Быстрая конкатенация (суммирование) больших строк в Lazarus

Сообщение Ism »

Как известно огромные строки суммируются тем медленнее, чем они больше. Вот решение проблемы

Код: Выделить всё

var
  SumResultTableQuerySt: TStringStream;
  length_str: longint;
  SumResultTableQueryPosStr: int64;
begin
  SumResultTableQuerySt := TStringStream.Create('');
  SumResultTableQuerySt.Size := 50000000; //Обязательно, чтоб память заранее выделялась, иначе будет тормозить
  SumResultTableQueryPosStr := 0;
  // В цикле
  temp_result := 'ttttttttt' 
  length_str := Length(temp_result);
  SumResultTableQueryPosStr := SumResultTableQueryPosStr + length_str;
  SumResultTableQuerySt.Position := SumResultTableQueryPosStr - length_str;
  SumResultTableQuerySt.WriteString(temp_result);

  // Получить результат
  SumResultTableQuery := SumResultTableQuerySt.DataString; 

И вуаля , можно складывать строки ограниченные только размером памяти
Padre_Mortius
энтузиаст
Сообщения: 1261
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Ism, Вам часто приходится работать с текстовыми массивами более 50 мегабайт?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

У меня программа постоянно работает с огромными строками и стандартные варианты очень медленные
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Rope? Может и не нужно выдумывать велосипед?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Brainenjii писал(а):Rope? Может и не нужно выдумывать велосипед?

И что это ?
Чтото переводить с английского лень

Добавлено спустя 12 минут 28 секунд:
Re: Быстрая конкатенация (суммирование) больших строк в Lazarus
Если вы об этом http://habrahabr.ru/post/144736/
Да ну нафиг, лучше работать с одним куском памяти
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Это структура данных разработанная для операции с большими строками с выигрышам по конкатенации и проигрышем по доступу по индексу
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Brainenjii писал(а):Это структура данных разработанная для операции с большими строками с выигрышам по конкатенации и проигрышем по доступу по индексу

А с одним куском памяти все операции максимально быстры , и освобождается все мгновенно
Ответить