Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти текущее количество байт, запись потока 
:(
    Опции темы
Modul
Дата 2.5.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

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



Не подскажете как можно определить текущее количество байт ( или время ), 
переданных на сервер.

Код

TCPClient server = new TCPClient("server.ru", port);
Network Stream writeStream = server.GetStream();
writeStream.Write(data, 0, data.Length);


Как это сделать параллельно с записью в поток (writeStream.Write).

Можно ли на этой основе сделать ProgressBar, 
зная размер передаваемых данных (data) и текущее число байт в единицу времени.
--------------------
I'll be back !
PM MAIL   Вверх
tol05
Дата 2.5.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 170



По твоему коду - никак. Можно разбить data на несколько, скажем 10 массивов байтов, передавать их по одному. 
По значению свойства NetworkStream.CanWrite передавать следующий массив и инкременировать счетчик или управлять прогресс-баром (когда CanWrite=true, значит массив (10% всех данных) передан и можно передавать следующий)


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Modul
Дата 2.5.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

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



Спасибо за ответ tol05

Мне также посоветовали  делать запись в асинхронном режиме. 

После срабатывания установленного  callback'a  --- порция данных ушла ---  двигается прогресс.

Посмотрел MSDN:
Код

BeginWrite 
Begins an asynchronous write to a stream.

EndWrite 
Handles the end of an asynchronous write.


Есть ли в этом смысл или нет ???

Это сообщение отредактировал(а) Modul - 2.5.2007, 23:30
--------------------
I'll be back !
PM MAIL   Вверх
tol05
Дата 3.5.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 170



Да, можно и так. Но ведь смысл не меняется. А смысл в том, чтобы передавать данные порциями и в том, что передача закрыта от тебя. А что делать после передачи пакета - вызывать callback или инкременировать счетчик - дело вкуса, не так ли? smile
Что касается производительности - то ты можешь код просто запихнуть в отдельный поток (создашь собственный асинхронный режим smile ), асинхронные методы так и делают.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
arilou
Дата 4.5.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



tol05, насколько мне известно, асинхронные методы работы со stream'ами используют порты завершения ввода-вывода (I/O completion ports), и потоки из пула для организации ожидания и последующего callback'а. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
tol05
Дата 4.5.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 170



Да, это так. Ну и что? smile 
Все равно это поток. А если речь идет о том, что я на свой поток производительность зря расходую, так ведь и пул-то создается по умолчанию с ограниченным кол-вом потоков, так что не факт, что при асинхронном чтении/записи он не кинется поток создавать.

А я могу своим потоком сам управлять, абортнуть его, например али приоритет поменять.

Так что я думаю, это не принципиально. Хотя и накладно несколько, согласен.
Вопрос темы в другом - пакеты данных.  smile 



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
arilou
Дата 4.5.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



Цитата(tol05 @  4.5.2007,  13:43 Найти цитируемый пост)
Да, это так. Ну и что?

Проблема в том, что в синхронном режиме у тебя поток не спит, а занят отправкой данных. Зачем его вообще запускать самому? Вызвал BeginWrite, и сиди себе спокойно  smile Причем поток из пула находится в состоянии ожидания, пока ось не сообщит в I/O completion порт, что данные зачитаны/записаны  smile Код будет понятнее.

Ну да не суть. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

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


 




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


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

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