Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.200.226] |
|
Сообщ.
#1
,
|
|
|
Столкнулся с проблемой медлительности StringReplace,
есть файл размером в 9mb там в общем тексте 48000 строк которые нужно удалить\заменить. StringReplace делает это за ~15 минут, а Notepad++ за пару секунд. Можете что-то посоветовать ? |
Сообщ.
#2
,
|
|
|
awk/sed
|
Сообщ.
#3
,
|
|
|
Нашёл у synopse достаточно быстрый StringReplaceAll , мою задачу решает за пару секунд
System.Classes.TThread.CreateAnonymousThread( procedure var LStopwatch: TStopwatch; List: TStringList; s: string; RW: RawUTF8; RW8: TRawUTF8List; begin LStopwatch := TStopwatch.Create; LStopwatch.Start; RW8:= TRawUTF8List.Create; RW8.LoadFromFile( '1038.xml' ); RW := StringReplaceAll(RW8.Text, 'http://', ''); RW8.Free; LStopwatch.Stop; mmo1.Lines.Add('Elapsed: ' + LStopwatch.ElapsedMilliseconds.ToString); end).Start; Добавлено Цитата Gonarh @ awk/sed спасибо Поржал |
Сообщ.
#4
,
|
|
|
StringReplace создаёт копию после каждой модификации - куча копирования в памяти, происходит вымывание кэша, вот оно и тормозит. Нужно какое-то in-place решение, либо порезка строки на части и хранение списка этих буферов, как у CString.
|
Сообщ.
#5
,
|
|
|
StringReplace очень тупой и убогий в ~XE1..3, в свежих версиях его неплохо подпилили, теперь он занимает пару экранов, но весьма шустр.
|