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

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

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

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

Сообщение Ism » 25.01.2013 20:37:23

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

Код: Выделить всё
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; 

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

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

Сообщение Padre_Mortius » 25.01.2013 21:10:25

Ism, Вам часто приходится работать с текстовыми массивами более 50 мегабайт?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение Ism » 25.01.2013 22:00:25

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

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

Сообщение Brainenjii » 25.01.2013 22:04:19

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

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

Сообщение Ism » 25.01.2013 22:08:53

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

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

Добавлено спустя 12 минут 28 секунд:
Re: Быстрая конкатенация (суммирование) больших строк в Lazarus
Если вы об этом http://habrahabr.ru/post/144736/
Да ну нафиг, лучше работать с одним куском памяти
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение Brainenjii » 25.01.2013 22:24:47

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

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

Сообщение Ism » 25.01.2013 23:56:42

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

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


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru