Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрое сохранение текста


Rambo ©   (2011-11-23 13:27:00) 

Нужно сохранять около тысячи файлов на диск (текст из памяти). Пока использую TStrings.SaveToFile, и вот решил это дело ускорить.
Будет ли быстрее использовать нетипизированный подход или старые добрые assign-write?


KilkennyCat   (2011-11-24 23:44:00) [1]

я так и знал - автор из тех, кто создает помойку.


Loginov Dmitry   (2011-11-24 13:48:00) [2]


> а зачем такое?


http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D1%80%D0%B2%D0%B5%D0%B9


QAZ   (2011-11-24 11:43:00) [3]


> а зачем такое?

а чтоб ты через 10 страниц прошол, пока в итоге не получиш "Чтобы скачать файл пришли СМС..."


KilkennyCat   (2011-11-24 02:57:00) [4]


> генерация какого-нибудь сайта с тысячами рандомных
> > страничек?

а зачем такое?


Ega23   (2011-11-23 22:13:00) [5]


> Length - не проблема, а вот TStrings.Text... Посмотри исходники
> геттера )


Ну нормальный геттер.

И вообще, неча заморачиваться, TStrings.SaveToStream(TFileStream)


Rambo   (2011-11-23 22:07:00) [6]

Всем спасибо!


Rambo   (2011-11-23 22:06:00) [7]


> Или это генерация какого-нибудь сайта с тысячами рандомных
> страничек?

Бинго!
Генерация выполнена за 38,907c. Сгенерировано 5277
В среднем на парсинг ушло: 0,685 мс
На сохранение файлов: 7,18 мс

Думаю покатит скорость.


Loginov Dmitry   (2011-11-23 22:01:00) [8]


> Нужно сохранять около тысячи файлов на диск (текст из памяти).
>  Пока использую TStrings.SaveToFile, и вот решил это дело
> ускорить.


Как часто "Нужно сохранять около тысячи файлов на диск"? Если это разовая операция, то можно 5 минут чай/кофе выпить.
Еже ли каждую минуту, то можно подумать об оптимизации. Как бы то ни было, запись 1000 файлов медленнее, чем запись одного, все-таки файловая система не бесплатно обходится. И почему столько файлов, с текстом, кто все это читать будет? Или это генерация какого-нибудь сайта с тысячами рандомных страничек?


Омлет   (2011-11-23 21:48:00) [9]

> Ega23 ©   (23.11.11 21:42) [9]
> А в чём проблема???


Length - не проблема, а вот TStrings.Text... Посмотри исходники геттера )


Rambo   (2011-11-23 21:45:00) [10]

Медленно. Гораздо быстрее вбить бесконечность


Ega23   (2011-11-23 21:42:00) [11]


> А без Length можно?


А в чём проблема??? Религия не позволяет?


Rambo   (2011-11-23 21:35:00) [12]

А без Length можно?


Ega23   (2011-11-23 21:17:00) [13]


> передать параметр nNumberOfBytesToWrite


Length(TStrings.Text) * SizeOf(Char)


Rambo   (2011-11-23 18:28:00) [14]

В общем решил использовать CreateFile WriteFile, вроде быстрее, последний вопрос: что будет если WriteFile передать параметр nNumberOfBytesToWrite=99999999999? Будут проблемы? Хочу сэкономить на подсчете символов.


Jeer   (2011-11-23 14:46:00) [15]


> Быстрое сохранение текста


Не озвучены количественные и сравнительные показатели "быстрее".


han_malign   (2011-11-23 14:38:00) [16]


> Быстрее, чем CreateFile - WriteFile, не сделаешь

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


Anatoly Podgoretsky   (2011-11-23 14:00:00) [17]

> Rambo  (23.11.2011 13:27:00)  [0]

Очень просто - измерь


Ega23   (2011-11-23 13:50:00) [18]


> и вот решил это дело ускорить.


От файловой операции никуда не уйдёшь.
Возможно, какая-нибудь дефрагментация диска даст прирост скорости бОльший, нежели попытки оптимизации кода.


clickmaker   (2011-11-23 13:39:00) [19]

Быстрее, чем CreateFile - WriteFile, не сделаешь


Наверх

Титульная страница Поиск, карта сайта Написать письмо