MS给.NET的socket异步提供了IOCP的支持,对于IOCP这个模型来说相信做过网络应用的朋友都清楚他的性能。但经过.NET的包装后他的性能又是怎样呢?以下是.NET Socket的吞吐能力测试结果。测试服务端的配置为Core E4300 1.8g 2g内存win2003sp2,配置似乎有点旧,但这样更容易体现.NET Socket的性能.
单一对象应答
客户端发起一个请求,服务器应答后客户端再进行下一次请求.
请求对象
1
2
3
4
|
public class Get : IMessage { public string ID; } |
应答对象
1
2
3
4
5
6
7
8
9
10
11
12
|
GetResponse response = new GetResponse(); response.User = new User(); response.User.Name = "henryfan" ; response.User.EMail = "henryfan@msn.com" ; response.User.City = "guangzhou" ; response.User.Counrty = "china" ; response.User.ID = 2324; response.User.Age = 45; response.User.BirthDay = 45454545; response.User.Enabled = true ; response.User.FData = 4454.45f; response.User.DData = 34343242.242; |
不同连接情况下的测试结果
列表对象应答
客户端发起一个请求,服务器应答后客户端再进行下一次请求.
请求对象
1
2
3
|
class Request : IMessage { } |
应答对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Response response = new Response(); for ( int i = 0; i < 5; i++) { Order order = new Order(); order.OrderID = 10248; order.CustomerID = "WILMK" ; order.EmployeeID = 5; order.OrderDate = 629720352000000000; order.RequiredDate = 629744544000000000; order.ShipAddress = "59 rue de l'Abbaye" ; order.ShipCity = "Reims" ; order.ShipCountry = "France" ; order.ShipName = "Vins et alcools Chevalier" ; order.ShipPostalCode = "51100" ; order.ShipRegion = "RJ" ; response.Orders.Add(order); } |
测试结果
带宽受限,因此只能测试1000连接
高连接并发
客户端每隔一秒请求发出一个请求
请求对象
1
2
3
|
Register register = new Register(); register.UserName = "henryfan" ; register.EMail = "henryfan@msn.com" ; |
应答对象
1
2
3
4
5
6
7
8
9
10
11
|
User user= new User(); user.Name = "henryfan" ; user.EMail = "henryfan@msn.com" ; user.City = "guangzhou" ; user.Counrty = "china" ; user.ID = 2324; user.Age = 45; user.BirthDay = 45454545; user.Enabled = true ; user.FData = 4454.45f; user.DData = 34343242.242; |
不同连接测试结果
从以上得到的数据来看,.NET提供的Socket吞吐能力还是很不错的,比较保守的计算在5年前的普通家用PC满负载的情况最低也可以处理5W的send+5w的receive的IO操作。为什么说是保守呢,因为以上测试所包括的并不仅仅是Socket吞吐,还有协议的分析对象的序列化等等工作。从后面的测试情况看,连接数并不是影响性能的主要因素,可以说存在的影响非常少,所以在设计的时候并没有必要注意在连接数上;在一些交流过程很多人第一时间关心这个在此提醒一下。看完这个结果相信对.NET Socket吞吐能力不了解的朋友应该大体上的了解,需要做这方面应用的朋友好好地利用它的,它的性能真的不错.
专注于可靠、高性能的Socket TCP通讯组件