Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация манипуляций со строками 
:(
    Опции темы
Гость_Игорь
Дата 4.5.2005, 23:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Хело эврибади!


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

Код

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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

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

Это сообщение отредактировал(а) Snowy - 5.5.2005, 00:04
PM MAIL   Вверх
Yanis
Дата 5.5.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



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

В модуле SysUtils много полезных функций для работы со строками. К стати, в работе со строками можно использовать относительные операторы (=, <>, <, >, <=, >=). А вот тут небольшой faq: FAQ

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


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.5.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Видимо в Java все складывания обрабатываются поочереди.
Сколько складываний строк, столько и операций.
Дельфя же заранее распределяет память под строку и все сразу туда спихивает, независимо от количества операций по тексту.
PM MAIL   Вверх
Yanis
Дата 5.5.2005, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Ясно. Спасибо.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Гость_Игорь
Дата 6.5.2005, 18:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за FAQ


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

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

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

  Вверх
Yanis
Дата 9.5.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата
Спасибо за FAQ


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

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

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

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


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.