【发布时间】:2014-10-21 12:59:15
【问题描述】:
我想在我的下载器中实现下载速率。谷歌搜索后发现一个相当复杂的应用程序Download manager - limit download speed。然后,在另一个线程https://stackoverflow.com/questions/26073779/how-to-add-download-rate-and-limit-rate-in-downloader-in-c-sharp 上找到了一个很好的建议:
设置一个每秒触发一次的计时器,并使用计数器记录已下载的字节数,在计时器 Tick 事件中将下载速率报告为 x Bytes/s,并将计数器重置为零
刚刚开始实现这个,使用
bytesIn = int.Parse(e.BytesReceived.ToString());
totalBytes = int.Parse(e.TotalBytesToReceive.ToString());
我的代码中有 bytesIn 显示已接收字节数,但如何使用计时器实现上面引用的建议,就好像我使用 tick() 事件并在每个 tick() 事件上计数它不会显示我的失败-速度。
请给点建议?
【问题讨论】:
-
还要跟踪目前的总下载时间...但是这个建议只是为了显示速率,而不是限制它。你想做什么?
-
顺便说一句,发送方的 TCP 速率控制很容易,通过使用延迟或丢弃的 ACK 来创建背压,在接收方网络堆栈中几乎不可能,而仅使用高级 API 的接收方则不可能。如果不希望 TCP 确定速率,则需要应用层的速率控制命令,以获得发送方的帮助。