Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
1-61106
Destroyer
2002-09-10 07:43
2002.09.19
Удаление листа из книги Excel


4-61357
easy
2002-07-03 13:46
2002.09.19
CPP -> Delphi


1-61089
манечка
2002-09-06 13:21
2002.09.19
Единицы измерения


1-61212
UnixManiac
2002-09-09 04:57
2002.09.19
Timer


3-61006
vich
2002-08-27 23:29
2002.09.19
Помогите! Хочу перенести данные из одной базы в другую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский