Я знаю, что это старая запись, но я думаю, что эта информация может быть полезна для тех, кто попадает сюда через Google или другой веб-поиск.
Если мы используем решение, опубликованное «арбитром», мы обнаружим, что поток будет отправлять большой объем данных, а затем он будет находиться в спящем режиме в течение большого количества времени, поскольку обычно ограничения скорости превышают 32–200 кб. в секунду при использовании стандартного ПК поток может обрабатывать от 10 до 100 МБ в секунду.
Я использовал следующее решение в своем проекте. Обратите внимание, что это всего лишь кусок кода, и вам придется изменить его, чтобы настроить его по своему усмотрению. Это написать в Visual Basic. Кстати, извините за мой английский ...
Dim SpeedLimit As Long = User.DownloadKbSpeedLimit * 1024, Elapsed As Long = 0
'Try to adjust buffersize to the operating system.
'Seem to be stupid, but the test shows it goes better this way.
If Environment.Is64BitOperatingSystem Then
stream.BufferSize = 64 * 1024
Else
stream.BufferSize = 32 * 1024
End If
'If buffersize is bigger than speedlimite, cut the buffersize to avoid send too much data
If SpeedLimit > 0 AndAlso e.BufferSize > SpeedLimit Then e.BufferSize = SpeedLimit
'Create Byte array to send data
Dim Buffer(e.BufferSize) As Byte
'Create Watch to control the speed
Dim Transmitted As Integer = 0, Watch As New Stopwatch()
Watch.Start()
'Start sending data
While True
'This enables the program to control another events or threads
System.Threading.Thread.Sleep(10)
Windows.Forms.Application.DoEvents()
'Recover data and write into the stream
If SpeedLimit = 0 OrElse Transmitted < SpeedLimit Then
Dim Readed As Integer = SomeFileStream.Read(Buffer, 0, Buffer.Length)
If Readed 0 Then Exit While
Stream.Write(Buffer, Readed)
Transmitted += Readed
End If
If Watch.ElapsedMilliseconds > OneSecond Then
Transmitted = 0
Watch.Restart()
End If
End While
Watch.Stop()
Stream.Close() : Stream.Dispose()
Надеюсь, это может кому-нибудь помочь.
Bye.