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,用来做服务端测试还是足够的。

测试逻辑

发送一个简单的对象

1
2
3
4
5
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 @   beetlex  阅读(10095)  评论(22编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示