我有以下代码(需要两个字符串参数 - 要下载的Url和要将其下载到的文件名:
var uri = new Uri(Url);
var request = WebRequest.Create(uri);
var response = request.GetResponse();
var fileSize = response.ContentLength;
var responseStream = response.GetResponseStream();
var targetStream = new FileStream(FileName, FileMode.Create);
var buffer = new byte[10000];
var count = responseStream.Read(buffer, 0, buffer.Length);
Console.WriteLine("Downloading {0} to {1} ({2} bytes).", uri, FileName, fileSize);
while (count > 0)
{
targetStream.Write(buffer, 0, count);
count = responseStream.Read(buffer, 0, buffer.Length);
}
targetStream.Flush();
targetStream.Close();
targetStream.Dispose();
responseStream.Dispose();
如果它在Powershell Cmdlet中运行5MB文件需要2秒钟,而如果我运行与控制台应用程序完全相同的代码,则下载文件大约需要14秒。
我想不出可能出现这种情况的任何可能原因。任何人都可以告诉我可能导致这种情况的原因吗?
我已经删除了错误检查等等,以提供一个小型的演示应用程序。哦,取出代码来编写文件根本不会减慢速度 - 它似乎纯粹是在下载速度上。我无法想象为什么下载会有不同的速度。
如果我输入" Console.Writeline(计数)"在循环的中间,Powershell版本的总是 10,000,但在控制台方面差别很大 - 有趣的是,缓冲区经常填充220或1460字节。