mono,.net,异步socket

本文对比了.NET中SocketAsyncArgs与IAsyncResult两种异步Socket方式的性能。在Windows环境下,SocketAsyncArgs表现更优;但在Mono平台上,由于实现差异,IAsyncResult更为稳定可靠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.net的异步 socket有两种形式

 

1,和其他async io类似的 iasyncresult

 

2,3.5后新增的socketasyncargs。。

 

据msdn说 第二种的性能有极大的提高。。我简单测试过。。在 accept socket这里,,速度是很快,大约为前者的3-4倍

 

测试环境 win xp sp3

前者 1秒钟大约能accept 500个socket

 

后者 可以达到 2000个。。

 

在处理数据收发 方面 两者的开销差不多,没有表现出特别明显的差异。。。

 

但是在mono上就不是这么一回事了。。。mono 2.6.x后也多了一个 socketasyncargs的实现。但是文档是没有的。。iasyncresult 有文档。。描述和msdn大致上差不多。。。

 

在mail-list上有人提过mono上的socketasyncargs是用thread来对应每一个请求性能很低 云云。。再进一步的资料就没有了,于是决定一试

 

测试环境 ubuntu 9.10 desktop.. mono是从svn下的。2.8 preview的版本。

 

默认的 ulimit -n 是 1024.。

 

iasyncresult 可以连接到1019.。然后报描述符溢出。。正常

 

socketasyncargs 只能连接到501 左右。。

 

修改 ulimit -n 到 12000。。测试 10000个 长连接

 

iasyncresult 可以正常工作。。 socketasyncargs 在连接到8601的时候 直接退出 报了一个assert 声明。。具体是什么没看。

 

由此推断。。socketasyncargs在mono上 没有使用到epoll,实现上也存在问题。。。

 

我看过 ice 3.4.1的代码,.net版本依然 还是使用 iasyncresult 并没有因为 socketasyncargs高效而替代。我想很有可能是为了兼容mono的原因。。。

 

如果要写一个跨平台的基于.net async socket server 建议还是使用 iasyncresult。。。

1。这个都是自己慢慢摸索的。mono for andriod ,资料真的太少了。 2.正在做安卓手机的项目。选择这条路都不知道能不能坚持下去。 3.希望有同样迷惑的人,照亮一点前面的路,也希望能照亮自己。 4.下面的代码运行环境 VS2012 + mono for andriod 4.8 java -sdk 与 mono for andriod 4.8 见下面的网盘 希望到时,这个网盘没有被封。 http://pan.baidu.com/s/1sjqMsqT 安装教程 http://www.51mono.com/article/show/172 http://www.51mono.com/article/show/96 安卓模拟器,推荐使用 Genymotion。 具体的安装教程,就请网上找吧。我实在没有力气了。 不过在模拟时,还是有点不够爽。 由于是 mono for andriod 专业破解版,所以可以直接使用 真机运行的。 我就是用 小米3 来运行。问题比较少。 另外要吐槽一下的是,开发这个手机APP,真的很耗内存。为此我不得不把我的老爷机换了4G的内存条。 由于是老爷机,内存条好贵的呀。 5,windows 开发环境 是 win8.1. 32位。 6.希望我啰嗦的这么多信息对你有用。 7.下面是正题了。 这个压缩包中,包含 C#写的服务端。 和 mono for andriod ---c# 写的手机客户端。 实现简单的 Socket --TCP/IP 通信。 其实,使用的类 和语法代码与 普通PC机的一样。但 手机客户端,还是有点点区别。 在pc客户端中,使用线程收取 信息,然后打印到UI控件上,是使用委托进行。 在手机APP中,有一个专门的方法来把这个信息寄送到 UI线程,然后在 UI控件上进行显示。 在例子中,有体现。 8.好了,就这么多了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值