Моя программа работает с большими обьемами строк.
Я использую TStringList, но таким макаром все работает медленно
и в него больше 64KB не запишешь. Как быстро манипулировать строками.
Например WinAmpУ практически не составляет труда сортировать или просто загрузить
плейлист на 2 тысячи файлов и осуществлять поиск по ним.
Здравствуйте, DimaS-Page, Вы писали:
DP>Моя программа работает с большими обьемами строк. DP>Я использую TStringList, но таким макаром все работает медленно DP>и в него больше 64KB не запишешь. Как быстро манипулировать строками. DP>Например WinAmpУ практически не составляет труда сортировать или просто загрузить DP>плейлист на 2 тысячи файлов и осуществлять поиск по ним.
Для большого объема надо использовать динамическую память.
Выделять для строки память и использовать TList для хранения указателей на эти строки.
А самое лучшее написать свой класс или объект, который бы работал с такими строками.
Здравствуйте, DimaS-Page, Вы писали:
DP>Моя программа работает с большими обьемами строк. DP>Я использую TStringList, но таким макаром все работает медленно DP>и в него больше 64KB не запишешь. Как быстро манипулировать строками.
В TStringList можно записать сколько хочешь KB, хоть 65
TStringList очень быстро манипулирует строками, например, путем Sorted.
DP>Например WinAmpУ практически не составляет труда сортировать или просто загрузить DP>плейлист на 2 тысячи файлов и осуществлять поиск по ним.
2K * ~260 = 520К.
Для TStringList не составляет труда сортировать, грузить и осуществлять поиск в оном.
Может быть имелся ввиду TListBox?
Тогда возьми вместо него, например, TStringGrid & OnDrawCell.
Строки же можно хранить в TStringList.
Здравствуйте, DimaS-Page, Вы писали:
DP>Моя программа работает с большими обьемами строк. DP>Я использую TStringList, но таким макаром все работает медленно DP>и в него больше 64KB не запишешь. Как быстро манипулировать строками. DP>Например WinAmpУ практически не составляет труда сортировать или просто загрузить DP>плейлист на 2 тысячи файлов и осуществлять поиск по ним.
TStringList нормально работает с большим количеством строк. Кто сказал, 64 Кб?! А то, что медленно — так сам смотри, сколько тебе надо времени на загрузку туда из файла, или просто на выделение памяти? И что значит манипулировать строками? Поиск? Отсортируй TStringList и будешь в нем быстро искать.
А в остальном обычно никто весь список не загружает, работают с частями
Здравствуйте, DimaS-Page, Вы писали:
DP>Моя программа работает с большими обьемами строк. DP>Я использую TStringList, но таким макаром все работает медленно
Есть такое дело.
DP>и в него больше 64KB не запишешь.
С чего ты это взял?
IMHO: самый лучший для тебя вариант — это проецировать нужый файл в память, быстро пробежатся по файлу и запомнить начало каждой строчки. Затем, чтобы обратиться к нужной строчке, ты ищешь её адрес в массиве и обращаешься к нужно области памяти, в которую спроецирован файл.
Здравствуйте, DimaS-Page, Вы писали:
DP>Я использую TStringList, но таким макаром все работает медленно DP>и в него больше 64KB не запишешь.
Это кто тебе сказал? Нету там никаких ограничений. DP> Как быстро манипулировать строками. DP>Например WinAmpУ практически не составляет труда сортировать или просто загрузить DP>плейлист на 2 тысячи файлов и осуществлять поиск по ним.
В TStringList тоже.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, DimaS-Page, Вы писали:
DP>Моя программа работает с большими обьемами строк.
Моя тоже:
procedure TMainForm.TestBtnClick(Sender: TObject);
var
S: TStringList;
St: string;
I, J: Integer;
const
STR_COUNT = 99999;
STR_BASE_LEN = 20;
STR_DELTA = 30;
begin
S := TStringList.Create;
try
for I := 0 to STR_COUNT do
begin
SetLength(St, Random(STR_DELTA) + STR_BASE_LEN);
for J := 1 to Length(St) do
St[J] := Char(Byte('a') + Random(26));
end;
S.Sort;
ShowMessage('List sorted');
finally
S.Free;
end;
end;
DP>Я использую TStringList, но таким макаром все работает медленно
Может TListBox под Win95? В этом случае возьми лучше ListView и почитай про свойство OwnerData
DP>и в него больше 64KB не запишешь. Как быстро манипулировать строками.
Как же мне удалось записать&
DP>Например WinAmpУ практически не составляет труда сортировать или просто загрузить DP>плейлист на 2 тысячи файлов и осуществлять поиск по ним.
Если Title составляет в среднем 30 символов, ты получишь чуть меньше 64 К
DimaS-Page> Я использую TStringList, но таким макаром все работает медленно
и в него больше 64KB не запишешь.
В других сообщениях уже сказали, что нет такого ограничения. Лично я
загружал от 200 до 700 мб, такой объем конечно не быстро, до 20 секунд, а
вот размеры в несколько мб просто глазом не заметить.