C# Socket Tcp 性能测试

前段时间讲述了在编写一个高性能的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性能有个初步的了解

下载相关程序

BeetleTest.rar (930.62 kb)

posted @ 2011-11-21 10:01  beetlex  阅读(10054)  评论(22编辑  收藏  举报