文件传输和带宽限制c#

时间:2014-10-21 08:52:50

标签: c# file sync bits

我需要将许多文件系统之间的大量文件复制到一个大容量存储中。 我还需要限制文件传输的带宽,因为网络不稳定,我需要其他东西的带宽。 另一个要求是它将在c#中完成。

我考虑过使用Microsoft File Sync Framework,但我认为它并没有提供带宽限制。 还考虑了robocopy,但它是一个外部进程,处理错误可能是一个小问题。 我看到了BITS,但是作业的可扩展性存在问题,我需要传输100多个文件,这意味着同时有100个作业。

有什么建议吗?建议?

谢谢

2 个答案:

答案 0 :(得分:0)

我会看一下How to improve the Performance of FtpWebRequest?,虽然它可能不是你想要的,它应该给你一些想法。

我认为你会想要某种有限的隧道,所以过程消极不能占用更多的带宽,因为没有可用的。连接中的连接。

或者你可以创建一个作业队列,它可以同时发送所有文件,但是会发送n个文件并等待一个文件完成,然后再开始下一个文件。

答案 1 :(得分:0)

好吧,你可以使用通常的I / O方法(读取+写入)并限制速率。

一个简单的例子(不是很好,但有效),将是这样的:

while ((bytesRead = await fsInput.ReadAsync(...)) > 0)
{
  await fsOutput.WriteAsync(...);

  await Task.Delay(100);
}

现在,显然,带宽限制并不是应用程序的真正工作。除非你是一个非常简单的网络,否则这应该由路由器的QoS处理,这应该确保各种服务获得它们的带宽份额 - 稳定的数据流通常具有较低的QoS优先级。当然,它通常需要您拥有网络管理员。