前段时间讲述了在编写一个高性能的Socket Tcp服务要注意的细节[c#编写高性能Tcp Socket应用注意事项];按那些细节描述的方法来实现一个Socket Tcp性能到底达到一个怎样的效果呢?以下是针对相关方法实现的Socket Tcp服务进行一个测试,看一下在那种方式编写的Socket Tcp达到一个怎样的性能指标。
测试环境
server:Core2 4300 1.8G 2G内存 win2003
client1:Core i7 Q740 1.7G 4G内存 win 764
client2:P4 2.4G 1G内存 WIN2003
由于I7 Q740装的是win7 系统所以没有拿来做服务器端。Core2 4300 虽然是4-5年前的cpu,用来做服务端测试还是足够的。
测试逻辑
发送一个简单的对象
User user = new User(); user.Name = "henryfan"; user.City = "GuangZahou"; user.EMail = "smarkhenry@live.com"; user.BrithDate = new DateTime(1900, 1, 1);
client1和client2各自启两个client程序,每个client开启1000个连接,每个连接每秒大概发送4个对象。
服务端接收数据后进行分包,读取缓中数据还原对象,然后再把对象写入缓冲区发送回去。
测试结果
服务端接入4K个连接,每秒接收1.6W个对象和回发1.6w个对象。内存占用300多m(实际占用并没有这么多,程序开启了1W个连接的缓冲区),cpu大概30%多的使用率。
服务端情况
Client情况
服务端性能分析
以上分析一个调度器的线程处理情况,从使用情况来看,对象写入缓冲所损耗的可以乎略不计,SendAsync占用了最多的资源。因此合理的使用SendAsync和ReceiveAsync是很有必要的。以上测试结果相信能让编写的这方面应用的朋友对c# Socket性能有个初步的了解
下载相关程序