我正在开发一个应用程序,该应用程序需要一种类型的消息访问数据库,而另一种类型的消息需要访问一些外部 xml api。
我必须处理很多......最大的挑战之一是让 HttpWebRequest 类表现良好。我最初只使用标准同步方法和线程池化整个事情。这不好。
因此,经过一番阅读,我看到推荐的方法是使用 Begin/End 方法将工作委托给 IO 完成端口,从而释放线程池并产生更好的性能。情况似乎并非如此……性能稍微好一些,但与线程池相比,我当然看不到 IO 完成端口的使用量那么多。
我有一个旋转的线程并向我发送线程池中可用的工作线程+完成端口。完成端口总是非常低(我见过最多使用 9 个),而且我总是使用大约 120 个工作线程(有时更多)。我对所有方法都使用了开始/结束模式httpwebrequest
:
Begin/EndGetRequestStream
Begin/EndWrite (Stream)
Begin/EndGetResponse
Begin/EndRead (Stream)
我做对了吗?我错过了什么吗?我可以(有时)同时使用多达 2048 个 http 连接(来自 netstat 输出) - 为什么完成端口号会这么低?
如果有人可以就如何管理工作线程、完成端口提供一些认真的建议,httpwebrequest
我们将不胜感激!
编辑:.NET 是一个合理的工具吗?我可以获得大量使用 .NET 和 System.Net 堆栈的 httpconnections 吗?有人建议使用 WinHttp(或其他一些 C++ 库)之类的东西,并从 .NET 中 pInvoke 它,但这不是我特别想做的事情!