1 スレッドでファイルをダウンロードすると、0.1 秒かかりました。しかし、同じファイルを 100 スレッドでダウンロードすると、ダウンロードごとに 10 秒かかりました。ソースコード:
private static int _threadsCount;
private static string _url;
private static void Main(string[] args)
{
_url = ConfigurationManager.AppSettings["Url"];
int threadsLimit = 1;
if (0 != args.Length)
threadsLimit = int.Parse(args[0]);
for (int i = 0; i < threadsLimit; i++)
{
var thread = new Thread(Start);
thread.Start();
}
while (_threadsCount < threadsLimit)
{
Thread.Sleep(1000);
}
Console.WriteLine("Done");
}
static void Start()
{
var webClient = new WebClient();
var stopwatch = new Stopwatch();
stopwatch.Reset();
stopwatch.Start();
for (int i = 1; i <= 10; i++)
{
webClient.DownloadData(_url);
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
Interlocked.Increment(ref _threadsCount);
}
したがって、100 スレッドでプログラムを実行すると、ファイルごとに 10 秒の速度になります。しかし、2 番目のプログラムを 1 つのスレッドで同時に実行すると、1 ファイルあたり 0.1 秒の速度になります。したがって、問題はインターネットの速度ではありません。
スレッドの数が増えるとダウンロード速度が低下するのに、他のプロセス (同じファイル) には影響しないのはなぜですか? 1つのプロセスで速度を上げる方法は?