Измерение скорости интернета без сохранения удаленного файла

Я пишу измеритель скорости интернета. Я хочу измерить скорость интернета, не сохраняя удаленный файл ни в файл, ни в память - мне нужно получить данные и забыть о них, поэтому кажется, что WebClient и StreamReader для этого не годятся (возможно, мне следует наследовать их и переопределить некоторые частные методы). Как это сделать?


person KOLANICH    schedule 14.07.2013    source источник
comment
Почему вы не хотите сохранять в память, кажется, самый логичный способ сделать это, Загрузить массив байтов, когда сделано байты / время = скорость   -  person sa_ddam213    schedule 15.07.2013
comment
Потому что файл может быть либо очень большим, либо иметь бесконечную длину. Также я считаю, что хранить информацию где-либо, если она не нужна, плохо. Я хочу иметь такой интерфейс, как WebClient (или, может быть, StreamReader, если его проще реализовать) (настроить его, а затем получать события с прогрессом), но сохранить тату в никуда.   -  person KOLANICH    schedule 15.07.2013
comment
Вы хотите измерить пропускную способность (скорость загрузки/выгрузки) на определенном сетевом интерфейсе?   -  person Bojan Komazec    schedule 15.07.2013
comment
Я хочу измерить скорость интернета. Измеритель загрузит данные с удаленного хоста, а затем загрузит данные на него. Нет необходимости сохранять загруженные данные. Нет необходимости загружать реальный файл. Загруженные данные нужно забыть, загружаемые данные генерируются случайным образом. (нам нужно только знать время загрузки/выгрузки и размер загружаемых/выгружаемых данных).   -  person KOLANICH    schedule 15.07.2013


Ответы (2)


Я думаю, что при написании такой системы вы также должны выбрать, какой именно размер файла вы хотите загрузить. В любом случае, вы можете скачать части файла, если «очень большой» или «бесконечный» размер является проблемой. Вы можете использовать HttpWebRequest.AddRange http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.addrange.aspx

person AJ222    schedule 14.07.2013

Вы можете использовать System.Net.WebRequest для измерения пропускной способности, используя асинхронные вызовы для захвата данных по мере их чтения.

Пример кода MSDN для WebRequest.BeginGetResponse показывает один метод использования асинхронных методов для чтения данных из удаленного файла по мере их получения. В примере данные ответа хранятся в StringBuilder, но вы можете пропустить это, так как сами данные вас не интересуют.

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

person Corey    schedule 15.07.2013