Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А вы не пробовали просто добавить в HttpClient System.Net.Http.Handlers.ProgressMessageHandler?
Да, это аналог. Вычисления скорости остаются, но можно убрать GetBytesAsync:
using (var handler = new ProgressMessageHandler())
using (var client = HttpClientFactory.Create(handler))
{
handler.HttpReceiveProgress += (s, e) =>
NetworkSpeed.AddInfo(e.BytesTransferred - lastRecorded);
// use client here to download file
}Вы своё приложение на гигабите (с задержками) тестировали? Меня смущает буфер в 80КБ. В худшем случае может же ограничивать скорость передачи.
//We pick a value that is the largest multiple of 4096 that is still smaller than the large object heap threshold (85K).
// The CopyTo/CopyToAsync buffer is short-lived and is likely to be collected at Gen0, and it offers a significant
// improvement in Copy performance.
private const int _DefaultCopyBufferSize = 81920;Почему смущает? За один вызов Read вы все равно не сможете прочитать больше данных, чем содержится в приёмном буфере сокета. Значение по умолчанию в Windows — 64K.
На самом деле можно читать и кусками меньшего размера — даже 8K для гигабита будет нормально. На производительности это не скажется. На гигабите будет около 15K IOPS на чтение и столько же на запись при работе с буферами по 8К.
Подсчет скорости скачивания в вашем приложении