![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| WDeveloper |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Посылаю файл размером 4 мб ( изображение ) с сервера на клиент посредством TServerSocket, TClientSocket.
На сервере я открываю через TFileStream изображение, потом формирую TMemoryStream с лидирующим числом ( кол-во байт в пакете ). Т.к. сокеты это поток - тут нужно следить за тем сколько пакетов вышло и когда пришёл последний. Вот.. далее:
и изображение уходит клиенту. Где оно уже собирается воедино и отображается так:
Но вот в чём вопрос. Если на клиенте формировать входящий поток ( изображения ) в TMemoryStream то процесс длиться ~ 5 секунд, в то время как при использовании TFileStream:
процесс длиться ~0.8 секунды. Почему такая огромная разница во времени?? Винт не слишком быстрый, 7200 рпм, 2 мб кэш. Оперативки 512. Проц 2.8 Ггц. |
||||||
|
|||||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну во-первых кэширование винта.
Во-вторых, приём стрима - не самый оптимальный вариант. Рекомендую следующий порядок действий: Получить размер. Выделить под него необходимый кусок памяти. Читать из сокета буфер, а не стрим, в эту память. В случае со стримом происходит постоянное перевыделение памяти, что замедляет процесс. Особенно это видно при недостатке памяти, малой скорости памяти, загруженности системы или не очень мощном процессоре. Добавлено @ 11:24 Да. Забыл. Можно модифицировать более простым путём. MemoryStream.SetSize(размер_данных); Это исключит перевыделение памяти. |
|||
|
||||
| WDeveloper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.1.2007 Репутация: нет Всего: нет |
Ну в принципе прием на клиенте у меня походу так и сделан:
Про перевыделение памяти не понял. Это на клиенте, при приеме? Куда этот SetSize-то прикрутить нужно? |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |