Главная страница
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
1-61163
Poirot
2002-09-07 11:56
2002.09.19
Как вшивают любой файл в BMP например!!!


1-61061
Андрей_К
2002-09-09 12:17
2002.09.19
Как запустить внешнее приложение?


1-61207
Korona
2002-09-08 13:43
2002.09.19
Кнопки в win xp становятся серыми


3-60975
Волжанин
2002-08-28 19:22
2002.09.19
Запросы в TQuery


3-60930
michael_b
2002-08-27 13:10
2002.09.19
Помогите огранизовать структуру бд.