首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在.NET中,Begin*和*Async的套接字有什么性能差异吗?

在.NET中,Begin*和*Async的套接字有什么性能差异吗?
EN

Stack Overflow用户
提问于 2011-03-05 16:22:48
回答 1查看 4.2K关注 0票数 19

我的应用程序需要将一条消息快速广播到大量客户端(1000秒)并收集结果。

我在考虑是使用BeginSend/EndSend等系列函数,还是使用SendAsync系列-性能有什么不同吗?除了*Async系列不需要分配IAsyncResult之外,它们到底有什么区别?

如果我理解正确的话,它们都使用IO完成端口和标准的.net线程池……那么有什么不同呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-05 16:27:30

区别只在于所使用的模式。

事实中的SendAsync使用Event-Based PatternBeginSendEndSend使用IAsyncResult pattern

编辑:我不知道IAsyncResult接口是如何在Socket类中实现的,但这里有一个来自MSDN的document,它解释了何时实现一种或另一种模式。

摘自上一部分:

虽然基于事件的异步模式在前面提到的场景中有很多优点,但它也有一些缺点,如果性能是您最重要的需求,您应该意识到这一点。

与IAsyncResult模式一样,基于事件的模式也无法解决以下三种情况:

在一个IAsyncResult

  • Blocking上等待多个IAsyncResult

上的

  1. 阻塞等待IAsyncResult

上的完成

您可以通过使用基于事件的模式来处理这些场景,但是这样做比使用IAsyncResult模式更麻烦。

开发人员通常将IAsyncResult模式用于通常具有非常高性能要求的服务。例如,轮询完成场景是一种高性能的服务器技术。

此外,基于事件的模式比IAsyncResult模式效率低,因为它创建了更多的对象,尤其是EventArgs,而且它跨线程同步。

以下列表显示了在决定使用IAsyncResult模式时应遵循的一些建议:

仅当您特别需要支持WaitHandle或IAsyncResult时,release.

  • Only

  • 才公开IAsyncResult模式。

  • 如果您有一个基于IAsyncResult模式的现有应用编程接口,请考虑在您的下一个API公开IAsyncResult模式中公开基于事件的模式。
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5202608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档