private void DownloadFile(FileLink fileLink, WebClient client) { Console.WriteLine("File {0} status - started.", fileLink.Name); var sppedInBps = _speedInKbps * 1024; _timer.Start(); using (var stream = client.OpenRead(fileLink.HttpAddress)) { var throttledStream = new ThrottledStream(stream, sppedInBps); var fileName = _outputPath + fileLink.Name; using (var file = File.Create(fileName)) { var buffer = new byte[BufferSize]; var readCount = throttledStream.Read(buffer, 0, BufferSize); while (readCount > 0) { file.Write(buffer, 0, readCount); readCount = throttledStream.Read(buffer, 0, BufferSize); } } throttledStream.Close(); } _timer.Stop(); Console.WriteLine("File {0} status - downloaded in {1} seconds.", fileLink.Name, _timer.ElapsedMilliseconds / 1000); _timer.Reset(); }
public static void ThrottledStreamRead() { byte[] sourceBuffer = { 0x10, 0x20, 0x30, 0x40, 0x50 }; byte[] destinationBuffer = new byte[sourceBuffer.Length + 1]; const int offset = 1; const int bytesToRead = 3; using (MemoryStream baseStream = new MemoryStream(sourceBuffer)) { const int readSpeed = 1; const int writeSpeed = 1; ThrottledStream throttledStream = new ThrottledStream(baseStream, readSpeed, writeSpeed); int bytesRead = throttledStream.Read(destinationBuffer, offset, bytesToRead); Assert.AreEqual(bytesToRead, bytesRead); for (int k = 0; k < destinationBuffer.Length; k++) { if (offset <= k && k < offset + bytesToRead) { Assert.AreEqual(sourceBuffer[k - offset], destinationBuffer[k]); } else { Assert.AreEqual(default(byte), destinationBuffer[k]); } } } }
public void TestStreamIntegrity() { using (Stream tar = new ThrottledStream(new MemoryStream(), 100)) { byte[] buf = DummyData.GenerateOrderedBytes(500); tar.Write(buf, 0, buf.Length); tar.Seek(0, SeekOrigin.Begin); byte[] buf2 = new byte[500]; tar.Read(buf2, 0, buf2.Length); Assert.IsTrue(buf.SequenceEqual(buf2)); } using (Stream tar = new ThrottledStream(new MemoryStream())) { byte[] buf = DummyData.GenerateOrderedBytes(4096); tar.Write(buf, 0, buf.Length); tar.Seek(0, SeekOrigin.Begin); byte[] buf2 = new byte[4096]; tar.Read(buf2, 0, buf2.Length); Assert.IsTrue(buf.SequenceEqual(buf2)); } using (Stream tar = new ThrottledStream(new MemoryStream(), 77)) { byte[] buf = DummyData.GenerateOrderedBytes(247); tar.Write(buf, 0, buf.Length); tar.Seek(0, SeekOrigin.Begin); byte[] buf2 = new byte[247]; tar.Read(buf2, 0, buf2.Length); Assert.IsTrue(buf.SequenceEqual(buf2)); } }
private void TestStreamIntegrity(int streamSize, long maximumBytesPerSecond) { // arrange byte[] data = DummyData.GenerateOrderedBytes(streamSize); byte[] copiedData = new byte[streamSize]; using Stream stream = new ThrottledStream(new MemoryStream(), maximumBytesPerSecond); // act stream.Write(data, 0, data.Length); stream.Seek(0, SeekOrigin.Begin); stream.Read(copiedData, 0, copiedData.Length); // assert Assert.AreEqual(streamSize, data.Length); Assert.AreEqual(streamSize, copiedData.Length); Assert.IsTrue(data.SequenceEqual(copiedData)); }
public void TestStreamRead() { using (Stream src = new ThrottledStream(new MemoryStream(DummyData.GenerateRandomBytes(1024)), 256)) { src.Seek(0, SeekOrigin.Begin); byte[] buf = new byte[256]; int read = 1; int start = Environment.TickCount; while (read > 0) { read = src.Read(buf, 0, buf.Length); } int elapsed = Environment.TickCount - start; Assert.GreaterOrEqual(elapsed, 4000); } }
public void TestStreamRead() { var size = 1024; var bytesPerSecond = 256; // 256 B/s var randomBytes = DummyData.GenerateRandomBytes(size); using Stream src = new ThrottledStream(new MemoryStream(randomBytes), bytesPerSecond); src.Seek(0, SeekOrigin.Begin); byte[] buf = new byte[bytesPerSecond]; int read = 1; long start = Environment.TickCount64; while (read > 0) { read = src.Read(buf, 0, buf.Length); } long elapsed = Environment.TickCount64 - start; var expectedTime = (size / bytesPerSecond) * 1000; Assert.IsTrue(elapsed >= expectedTime); }