Страница 1 из 1

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

СообщениеДобавлено: 25.01.2013 20:37:23
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; 

И вуаля , можно складывать строки ограниченные только размером памяти

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

СообщениеДобавлено: 25.01.2013 21:10:25
Padre_Mortius
Ism, Вам часто приходится работать с текстовыми массивами более 50 мегабайт?

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

СообщениеДобавлено: 25.01.2013 22:00:25
Ism
У меня программа постоянно работает с огромными строками и стандартные варианты очень медленные

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

СообщениеДобавлено: 25.01.2013 22:04:19
Brainenjii
Rope? Может и не нужно выдумывать велосипед?

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

СообщениеДобавлено: 25.01.2013 22:08:53
Ism
Brainenjii писал(а):Rope? Может и не нужно выдумывать велосипед?

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

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

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

СообщениеДобавлено: 25.01.2013 22:24:47
Brainenjii
Это структура данных разработанная для операции с большими строками с выигрышам по конкатенации и проигрышем по доступу по индексу

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

СообщениеДобавлено: 25.01.2013 23:56:42
Ism
Brainenjii писал(а):Это структура данных разработанная для операции с большими строками с выигрышам по конкатенации и проигрышем по доступу по индексу

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