gpt4 book ai didi

.Net 4.5 Async 与 [...]Async 与 Begin[...] 的 C# Socket 性能

转载 作者:太空狗 更新时间:2023-10-29 20:54:33 26 4
gpt4 key购买 nike

目前,根据我的研究,有 3 种异步使用套接字的方法:

.Net 4.5 异步示例:Using .Net 4.5 Async Feature for Socket Programming (第二篇)

[...]异步:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

开始[...]:http://msdn.microsoft.com/en-us/library/5w7b7x5f(v=vs.110).aspx

我对 .Net 提供的用于处理异步套接字的所有选项感到非常困惑。为什么我应该使用一个或另一个?有什么更好的选择来获得数千个同时连接的性能?

最佳答案

使用 SocketAsyncEventArgs 的方法最符合底层 Windows 技术(I/O 完成端口)。它们本质上是一个裸机包装器,旨在执行零分配并以不太友好的 API 为代价提取最高性能。这有一个更紧密耦合的代码的缺点,因为它没有实现任何标准的 Stream API。其他异步套接字方法都包装了这个方法。

使用 Begin/End 对的方法使用所谓的异步编程模型 (APM)。 APM 是 .NET 的原始异步模型。如果您半吊子使用它,编写意大利面条代码非常容易,但是一旦您有一些经验,它就会发挥作用并且使用起来相当简单。不过,它们在现代 .NET 中应该用处不大,因为我们已经有了更简单、性能更好的东西:

返回 Task 的方法使用基于任务的异步模式 (TAP)。任务是对 APM 的纯粹升级:它们更灵活,更容易组合,并且通常应该具有相同或更好的性能。与语言集成的 async/await 结合使用时,您可以编写性能出色且更易于理解和维护的代码。

tl;dr 使用 Task 方法,除非您有极端性能的要求。然后使用 SocketAsyncEventArgs 方法。不要使用 APM 方法。

关于.Net 4.5 Async 与 [...]Async 与 Begin[...] 的 C# Socket 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com