Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

var xxx:String;???   Найти похожие ветки 

 
Usre   (2002-09-08 23:34) [0]

Есть ли тип переменной быстрее string ???


 
Smiths   (2002-09-08 23:40) [1]

Типы переменных вообще-то в скорости не соревнуются :)


 
Usre   (2002-09-08 23:53) [2]

А чем отличается string от WideString ?


 
Malder ©   (2002-09-09 00:05) [3]

Тип Максимальная длина Используется для

ShortString 255 обратной совместимости

AnsiString 231 (2 Гб) символов ANSI

String или 255, или до 2 Гб символов ANSI или Unicode

WideString 230 (1 Гб) символов Unicode


Родовым является тип String, который имеет разный смысл в зависимости от директивы компилятора $H. Если включена директива {$H+} (она включена по умолчанию), то String интерпретируется компилятором как тип AnsiString - длинная строка с нулевым символом в конце. Если же включить директиву {$H-}, то String интерпретируется компилятором как тип ShortString - короткая строка без нулевого символа в конце. Если в объявлении типа после ключевого слова String следует число символов в квадратных скобках (например, String[4]), то, независимо от директив компилятора, тип трактуется как строка без нулевого символа в конце с указанным числом символов.

Со строками можно оперировать как с индексированными массивами символов. Например, S[i] - это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, т.е. индекс 1 соответствует первому символу). Для строк типа ShortString или AnsiString выражение S[i] имеет тип AnsiChar, для строк типа WideString - WideChar.



 
Старый паскалист   (2002-09-09 00:40) [4]

string тормозит из-за постоянной реаллокации его в памяти.
Напр., при
s := s + "aaaa";
старая память s будет освобождена, выделена новая на 4 байта
больше и туда помещён результат.

Соответственно, некоторыми ухищрениями этого можно избежать.
Напр., выделять память с помощью SetLength большими блоками и
вместо
s := "";
for i := 0 to Count-1 do
s := s + add_s[i];

писать (я написал из головы, могут быть ошибки. главное - идея)

SetLength(s, 1000);
TrueLengthOfS := 0; //Истиная длина строки - в которой хранится полезный текст
for i := 0 to Count-1 do
begin
if Length(s) < TrueLengthOfS + Length(add_s[i]) then
SetLength(s, TrueLengthOfS + Length(add_s[i]) + 1000)

Move(add_s[i][1], s[TrueLengthOfS+1], Length(add_s[i]));

// Корректируем полезную длину s
TrueLengthOfS := TrueLengthOfS + Length(add_s[i]);

end;

// Отбрасываем мусор
SetLength(s, TrueLengthOfS);

Таким образом, можно значительно уменьшить кол-во реаллокаций,
но зато усложнить код. Поэтому так поступать надо только в случае, когда это самое узкое место в быстродействии.



Страницы: 1 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-60972
serg1977
2002-08-28 16:23
2002.09.19
Какую использовать компаненты ?


7-61324
Nalsur
2002-07-09 14:47
2002.09.19
Как вытащить из системного реестра информацию о всей системе?


1-61158
Александр
2002-09-07 13:12
2002.09.19
ListView и Keys


14-61316
MBo
2002-08-22 15:20
2002.09.19
Что-то давно штатный психиатр не появлялся.


1-61161
dzmitry_
2002-09-07 11:33
2002.09.19
Вставка в TRichEdit объектов