请教为什么我多线程下载,网络监控却最多只有2个端口在收发数据?
每个线程下载数据时间比较长,不会因为下载很快结束就退出。如何才能 每个子线程 独占一个网络线程 收发网络数据?例如:
创建 100个线程 网络监控可以看到 有 100条独立网络线程在同时下载数据...伪代码如下:
Thread[] threads = new Thread[100];
for (int i = 0; i < threads.Length; i++) {
threads[i] = new Thread(new ThreadStart(Download));
threads[i].Name = "线程:" + (i + 1);
MainShowmsg("开启线程下载:" + (i + 1));
threads[i].Start();
}
.......
.... private void Download() { WebClient wc = new WebClient();
byte[] htmlbodydata = wc.DownloadData("http://www.xxx.com/xxx.zip"); File.WriteAllBytes(radomfilename+".zip",htmlbodydata );
}
每个线程下载数据时间比较长,不会因为下载很快结束就退出。如何才能 每个子线程 独占一个网络线程 收发网络数据?例如:
创建 100个线程 网络监控可以看到 有 100条独立网络线程在同时下载数据...伪代码如下:
Thread[] threads = new Thread[100];
for (int i = 0; i < threads.Length; i++) {
threads[i] = new Thread(new ThreadStart(Download));
threads[i].Name = "线程:" + (i + 1);
MainShowmsg("开启线程下载:" + (i + 1));
threads[i].Start();
}
.......
.... private void Download() { WebClient wc = new WebClient();
byte[] htmlbodydata = wc.DownloadData("http://www.xxx.com/xxx.zip"); File.WriteAllBytes(radomfilename+".zip",htmlbodydata );
}
我现在的解决方法是 单独写一个 exe程序,然后 主程序调用 成为一个进程 这样可以保证每一个进程一个网络连接。 启动100个程序就可以有100个网络连接。但是 如果通过 thread 启动子线程,则会最多只会共享2个网络连接, 就算活动有100个线程也没用
感觉是 .net 在优化,但是无法满足需求, 不知道有什么办法可以保证每个线程都独占一个网络连接?
晕!照你这么说,假设一个服务器有2000个客户端连接,就要至少有2000个线程在搞什么收发?如果是做课堂练习,就算了。如果是搞产品,2000客户端连接的情况下(没有shutdown和close的情况下)往往也只需要十几个或者而十几个线程足够了。你的那种设计思路,我不知道还能不能承受?!