Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Оптимизация манипуляций со строками


Автор: Гость_Игорь 4.5.2005, 23:34
Хело эврибади!


Мое приложение записывает свои действия в лог файл вот таким
способом:

Код

var Buffer : string;
while true do begin
  Buffer:= DateTimeToStr(Now) + ' - ' + Logger.GetNext + #$0D#$0A;
  FileWrite(LogFileHandle, Pointer(Buffer)^, Length(Buffer));
end;


Logger.GetNext - это мой класс (наследованный от TStringList)
который просто возвращает следующую строку. Но вопрос не в нем.

Собственно меня смущает вот этот код:
Код

Buffer:= DateTimeToStr(Now) + ' - ' + Logger.GetNext + #$0D#$0A;


Допустимо ли в Делфи складывать строки таким образом???
(Если б я написал такое на Java то меня б сразу уволили.)

Порылся в хелпе - нашел тока такую функцию
function Concat(s1 [, s2,..., sn]: string): string;

Будет ли правильней использовать ее вместо простого сложения?

Подскажите какие еще есть правильные методы работы со строками в Делфи.
Есть ли для этого спец. функции\классы ?

Было б здорово почитать на эту тему какую-нить умную статью.

Заранее спасибо.

Автор: Snowy 4.5.2005, 23:45
Не вижу здесь ничего приступного.
Так и должно быть.
компилятор выполняет сложение в один проход.
Delphi сама выполнит оптимизацию по ходу компиляции.
Concat в данном случае ничего ни прибавит.
[add]
Поправочка. Concat не только не добавит.
Вот длянул в хелпе:
Цитата
Tip: The plus operator is faster than Concat.

Так что его присутствие обусловлено только совместимостью с другими версиями.
По сути он даже медленнее.

Автор: Yanis 5.5.2005, 17:01
Цитата
Подскажите какие еще есть правильные методы работы со строками в Делфи.
Есть ли для этого спец. функции\классы ?
Было б здорово почитать на эту тему какую-нить умную статью.

В модуле SysUtils много полезных функций для работы со строками. К стати, в работе со строками можно использовать относительные операторы (=, <>, <, >, <=, >=). А вот тут небольшой faq: http://www.atrussk.ru/delphi/5/string/faqstr.htm

Цитата
(Если б я написал такое на Java то меня б сразу уволили.)
Интересно почему?

Автор: Snowy 5.5.2005, 21:51
Видимо в Java все складывания обрабатываются поочереди.
Сколько складываний строк, столько и операций.
Дельфя же заранее распределяет память под строку и все сразу туда спихивает, независимо от количества операций по тексту.

Автор: Yanis 5.5.2005, 23:04
Ясно. Спасибо.

Автор: Гость_Игорь 6.5.2005, 18:19
Спасибо за FAQ


ЗЫ Насчет сложения строк в Яве - то для этого есть спец.
класс StringBuffer

Явное же складывание строк ведет к нерациональному
расходу памяти, нерациональному же P-коду (строки кстати компилятся в StringBuffer - я проверял) и, как утверждают некоторые гуру, к memory leak

При приеме на работу в какую-нить
более менее солидную контору при собеседовании
первым же вопросом (ну или вторым) является вопрос про
сложение строк. Таким образом они думают, что отсеивают
лохов.

Автор: Yanis 9.5.2005, 20:18
Цитата
Спасибо за FAQ


ЗЫ Насчет сложения строк в Яве - то для этого есть спец.
класс StringBuffer

Явное же складывание строк ведет к нерациональному
расходу памяти,  нерациональному же P-коду (строки кстати компилятся  в StringBuffer - я проверял) и, как утверждают некоторые гуру, к memory leak

При приеме на работу в какую-нить
более менее солидную контору при собеседовании
первым же вопросом (ну или вторым) является вопрос про
сложение строк. Таким образом они думают, что отсеивают
лохов.

Теперь понятно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)