|
|
1
1
您不应该使用线程来运行多个I/O流。由于这些线程主要在I/O上阻塞,因此可以使用非阻塞或异步I/O更有效地实现这一点。不是一个线程与一台服务器对话,而是一个线程与N台服务器对话。 由于您使用的是HttpWebRequest,您需要查看 HttpWebRequest.BeginGetResponse 和 HttpWebRequest.BeginGetRequestStream . |
|
|
2
1
一般来说 . 在每个.NET进程中都有一个线程池,一个随时可以为您工作的线程池。你应该用它。 有关原因,请参见 Thread vs ThreadPool 或 The .NET ThreadPool
.NET还有一种简单易用的机制,用于将工作发送到线程池中的线程: ThreadPool.QueueUserWorkItem . 明确地 还有你的。 |
|
|
3
0
很抱歉,我没有多线程HTTP帖子的经验。
而且,如果这不起作用,您可以使用ThreadPool而不是创建自己的线程。 |
|
|
4
0
有必要让50个线程同时运行吗? 只需将生成的线程数量限制为10个线程,然后批量运行即可。 |
|
|
5
0
我想知道还有什么会影响CPU性能(比如低效的监视循环),或者是因为内存耗尽而导致页面文件抖动问题。如果您的工人类有大量本地数据,则可以相当快地吸收内存。 我使用HttpWebRequest做了类似的事情,已经能够在飞行中同时有大约100个连接,但在这一点上,我已经最大限度地利用了网络带宽和内存,尽管50个连接运行良好。我创建自己的线程,而不是使用线程池,因为我使用回调,所以我可以轻松跟踪线程状态,甚至在需要时中止线程。它还简化了从失败连接重新启动的过程——我只是将线程抛出回挂起的线程队列中。
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |