Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.03.2014, 14:20   #21
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а что происходит при Delete, физически?
eval вне форума
Старый 23.03.2014, 14:46   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с какого перепуга Delete стал ресурсоёмкой операцией?
Все строковые операции считаются ресурсоемкими потому что строку пересоздают в большинстве случаев. И их любят пихать в циклы - отсюда и стереотипы. Опять таки нужно смотреть и анализировать генофонд. Удаление может строку не пересоздавать а просто делать сдвиги, но это не совсем цикл.
Цитата:
а что происходит при Delete, физически?
Сказал же: открой генофонд и посмотри. Она полностью на ассемблере, в старых делфи вроде бы rep movs было, в новых посложнее уже.
I'm learning to live...
Stilet вне форума
Старый 23.03.2014, 18:36   #23
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Сказал же: открой генофонд и посмотри.
Во первых, самому написать пальцы отвалятся? Во вторых, если я не знаю что такое генофонд (сомневаюсь что речь о человеческих генах), что мне открывать??? Или расспрашивать о том что мне не нужно вместо того, чтоб получить прямой ответ на свой вопрос???
XE5 вне форума
Старый 23.03.2014, 19:00   #24
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код в исходниках делфи. См. в System _Delete. Оценочно на моем компе 100000 с Delete ~ 65 сек, с PosEx - 0.047 сек. Delphi7. Существенно, не правда ли?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 23.03.2014, 19:14   #25
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Аватар
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i, n: integer;
  test_string: string;
begin
  for i := 1 to 100000 do
    test_string := test_string + '1';
  n := GetTickCount;
  for I := 1 to 100000 do
  Delete(test_string, 1, 1);
  ShowMessage(IntToStr(GetTickCount - n));
end;
Полторы секунды, среда XE5.
XE5 вне форума
Старый 23.03.2014, 19:25   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s1,s: String;
    List: TStringList;
    i,iPos1,iPos2: Integer;
    j: Cardinal;
begin
  s1:='';
  for i:=1 to 100000 do s1:=s1+Format('<div class="primer"><p>Primer%d</p></div>',[i]);
  List:=TStringList.Create;
  s:=s1;
  j:=GetTickCount;
  while pos('<p>', s)>0 do begin
    Delete(s,1,pos('<p>',s)+2);
    List.Add(Copy(s,1,pos('</p>',s)-1));
  end;
  Label1.Caption:=IntToStr(GetTickCount-j);

  Memo1.Lines.Assign(List);

  List.Clear;
  iPos1 := 0;
  s:=s1;
  j:=GetTickCount;
  while PosEx('<p>',s,iPos1+1)>0 do begin
    iPos1:=PosEx('<p>',s,iPos1+1);
    iPos2:=PosEx('</p>',s,iPos1+1);
    if iPos2>0 then List.Add(Copy(s,iPos1+3,iPos2-iPos1-3));
    iPos1 := iPos2;
  end;
  Label2.Caption:=IntToStr(GetTickCount-j);

  Memo2.Lines.Assign(List);
  List.Free;
end;
Цитата:
среда XE5
Видимо существенно улучшили код
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 23.03.2014, 19:33   #27
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

2.5 минуты против 31 миллисекунды. Я в код не вникал, но сдаётся виноват не Delete. Предположительно функция pos проигрывает функции PosEx.

Последний раз редактировалось XE5; 23.03.2014 в 19:42.
XE5 вне форума
Старый 23.03.2014, 19:44   #28
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Предположительно функция pos проигрывает функции PosEx.
Крайне мало вероятно. Pos на asm-е, PosEx - перебор в цикле WHILE. При использовании Delete PosEx и не нужен - поиск от 1, все равно Pos из PosEx будет вызван. По крайней мере в D7
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 23.03.2014, 19:48   #29
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Во первых, самому написать пальцы отвалятся?
Во-первых я не тебе это писал, во-вторых я даже комментировать твой выпад не буду, поскольку каждый программист знает что если есть какие-то исходники, в которых заключен спорный момент нужно из проанализировать.
I'm learning to live...
Stilet вне форума
Старый 23.03.2014, 20:13   #30
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Видимо существенно улучшили код
Цитата:
2.5 минуты против 31 миллисекунды.
Беру свои слова обратно Замени String на AnsiString. Думаю, что быстрей будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг Gudzik11 Общие вопросы Delphi 6 15.04.2012 21:51
парсинг Pein95 C# (си шарп) 3 16.09.2011 01:24
Парсинг DeDoK Общие вопросы Delphi 8 02.02.2011 14:20