为什么在Powerershell cmdlet中WebRequest比控制台应用程序快得多?

时间:2014-05-09 14:49:53

标签: c# powershell

我有以下代码(需要两个字符串参数 - 要下载的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字节。

0 个答案:

没有答案