我的应用程序需要将一条消息快速广播到大量客户端(1000秒)并收集结果。
我在考虑是使用BeginSend/EndSend等系列函数,还是使用SendAsync系列-性能有什么不同吗?除了*Async系列不需要分配IAsyncResult之外,它们到底有什么区别?
如果我理解正确的话,它们都使用IO完成端口和标准的.net线程池……那么有什么不同呢?
发布于 2011-03-05 16:27:30
区别只在于所使用的模式。
事实中的SendAsync
使用Event-Based Pattern。BeginSend
和EndSend
使用IAsyncResult pattern。
编辑:我不知道IAsyncResult
接口是如何在Socket
类中实现的,但这里有一个来自MSDN的document,它解释了何时实现一种或另一种模式。
摘自上一部分:
虽然基于事件的异步模式在前面提到的场景中有很多优点,但它也有一些缺点,如果性能是您最重要的需求,您应该意识到这一点。
与IAsyncResult模式一样,基于事件的模式也无法解决以下三种情况:
在一个IAsyncResult
上的
上的完成
您可以通过使用基于事件的模式来处理这些场景,但是这样做比使用IAsyncResult模式更麻烦。
开发人员通常将IAsyncResult模式用于通常具有非常高性能要求的服务。例如,轮询完成场景是一种高性能的服务器技术。
此外,基于事件的模式比IAsyncResult模式效率低,因为它创建了更多的对象,尤其是EventArgs,而且它跨线程同步。
以下列表显示了在决定使用IAsyncResult模式时应遵循的一些建议:
仅当您特别需要支持WaitHandle或IAsyncResult时,release.
https://stackoverflow.com/questions/5202608
复制相似问题