powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование строковой переменной в цикле
11 сообщений из 11, страница 1 из 1
Использование строковой переменной в цикле
    #39607031
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. нужно уточнить один вопрос.
есть код цикла :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
const
  HtmlTrash: array[0..3] of string = ('&','laquo;','raquo;','nbsp;');
....
function UrlsDataCorrector(const aData:string):string;
var
  TrashStr:string;
...

  for J := Low(HtmlTrash) to High(HtmlTrash) do  
  begin
    TrashStr:=HtmlTrash[J];                  
    Repeat
      Cnt:=PosEx(TrashStr,UrlStrFull,1);
      if Cnt > 0 then
        Delete(UrlStrFull,Cnt,Length(TrashStr));  
    Until Cnt = 0;
  end;



где для обработки данных используется дополнительная переменна TrashStr

Вопрос : в случае если значение HtmlTrash[J] используется в цикле более одного раза как правильно с точки зрения потребления ресурсов памяти и быстродействия :
- использовать дополнительную переменную TrashStr
- везде где надо использовать HtmlTrash[J] вместо TrashStr

а то уже такие обработки идут что i7(8 ядер) начинает тормозить
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607035
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
если вопрос в быстродействии, то я бы вообще отказался бы от операций со строками
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607037
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair,
Use regexpr, Luke!
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607044
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepairкак правильно с точки зрения потребления ресурсов памяти и быстродействия :
- использовать дополнительную переменную TrashStr
- везде где надо использовать HtmlTrash[J] вместо TrashStr

Правильнее будет выкинуть этот бесконечный цикл и сделать однопроходный парсер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607047
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это просто пример цикла
вопрос в другом, если кто не понял
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607048
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PcrepairВопрос : в случае если значение HtmlTrash[J] используется в цикле более одного раза как правильно с точки зрения потребления ресурсов памяти и быстродействия :
- использовать дополнительную переменную TrashStr
- везде где надо использовать HtmlTrash[J] вместо TrashStr
это копейки, не там ищешь.

а то уже такие обработки идут что i7(8 ядер) начинает тормозитьне вижу кода, который бы загрузил боле одного ядра

Задача-подсказка:
найти позиции слов-констант во входной строке - результат сохранить в массив (функции работы со строками не использовать!).
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607049
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepair,
Все всё поняли.
Просто ты не понимаешь, что для "потребления ресурсов памяти и быстродействия" важно совсем не то, чем ты интересуешься.
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607083
Pcrepair
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kep-koэто копейки, не там ищешь. не вижу кода, который бы загрузил боле одного ядра


копейка к копейке и вот уже мульон, так что правильный ответ по прежнему отсутсвует. что весь код показать? там гдето 50 тыс строк
тут вопрос по основам на примере цикла и ничего более
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607186
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepairkep-koэто копейки, не там ищешь. не вижу кода, который бы загрузил боле одного ядра

копейка к копейке и вот уже мульон, так что правильный ответ по прежнему отсутсвует. что весь код показать? там гдето 50 тыс строк
тут вопрос по основам на примере цикла и ничего более
Вот это:
Код: pascal
1.
2.
if Cnt > 0 then
        Delete(UrlStrFull,Cnt,Length(TrashStr)); 

при каждом проходе будет вызывать копирование памяти туда-сюда. Это гораздо медленнее, чем простое присваивание ссылки на строку в
Код: pascal
1.
TrashStr:=HtmlTrash[J];


Так что, как уже сказали, не там вы узкое место ищите.

Но да, если к этой строке потом будет много обращений, то имеет смысл кэшировать ссылку на неё.
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607209
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pcrepairкопейка к копейке и вот уже мульон, так что правильный ответ по прежнему отсутсвует. что весь код показать? там гдето 50 тыс строк
тут вопрос по основам на примере цикла и ничего более
Так на примере цикла и ответили. Т.к. для такого класса задач цикл вообще не нужен. Один проход обычным парсером.

Если 100500 раз по строке циклом проходить, то тогда, конечно, копейки нужно экономить. Но если сделать нормальный парсер, то на копейки будет пофиг. Тут и на водку рекой и на цыган с музыкой хватит )))

IMHO
...
Рейтинг: 0 / 0
Использование строковой переменной в цикле
    #39607334
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кешировать и так константную строку смысла нет. Да даже и если не константную. Разницы там от силы на одну инструкцию. А вот Delete в цикле это и есть самый большой пожиратель. Как только заменишь эту жуть на однократный проход по строке, сразу увидишь разницу. Принцип простой - найти "&", проверить следующие за ним символы на соответствие трэш-строкам, если совпадает - скопировать в результат всё от предыдущей засечки до текущей позиции и пропустить код символа, если не совпадает - искать "&" дальше.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование строковой переменной в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]