Skip to content

性能说明

Linq2db压力测试

LINQ to DB 是 HMX 平台的核心数据访问组件,是一款轻量级的 .NET ORM 框架,以高性能、低内存消耗著称。根据学术研究,在 .NET 平台主流 ORM 框架(Entity Framework Core、Dapper、LINQ to DB)的性能对比中,LINQ to DB 在多数测试场景下表现出优异的效率和较低的内存占用。针对 LINQ to DB 的性能测试,主要关注以下维度:

推荐方案:采用 BenchmarkDotNet 进行精确的方法级性能基准测试,结合 NBomber 进行高并发场景下的压力测试。

测试场景说明测量指标
主键查询通过主键查询单条记录Mean(平均耗时)、Gen0(GC 次数)
条件查询通过非索引字段条件查询内存分配量、耗时
复杂联表查询3-5 张表的 Inner Join / Left Join执行时间、返回结果集大小
批量插入插入 100/1000/10000 条记录吞吐量(条/秒)
批量更新条件批量更新耗时、影响行数
聚合查询GROUP BY + COUNT/SUM/AVG执行计划分析

测试结果

测试场景并发数QPSP95 响应时间CPU 使用率内存使用
主键查询10015,0008ms25%200MB
主键查询50035,00025ms65%450MB
复杂联表查询1003,00045ms40%350MB
复杂联表查询2004,50080ms70%500MB
批量插入(1000条)505,000条/秒180ms50%400MB

核心测试场景:10万条 × 20字段数据集

在真实业务场景中,批量数据导出、报表生成、数据迁移等操作常需要一次性查询大量数据。针对 10万条记录、20个字段 的数据集进行全量查询测试,是评估 ORM 在大数据量场景下性能表现的重要指标。

数据量字段数查询方式预期耗时内存占用
1万条20全量查询200-400ms~20-30MB
5万条20全量查询1-2秒~80-120MB
10万条20全量查询2-4秒~150-250MB
10万条20仅 5 个字段0.8-1.5秒~50-80MB
10万条20NoTracking 模式比默认快 30-50%略低

Http请求压力测试

ASP.NET Core WebAPI 是 HMX 平台对外提供 HTTP 服务的核心组件。针对 WebAPI 的压力测试,主要评估接口在高并发场景下的响应能力、吞吐量和稳定性,识别性能瓶颈,为生产环境容量规划提供依据。推荐方案:采用 k6 进行高并发压力测试,结合 BenchmarkDotNet 进行精确的方法级性能基准测试。

测试场景说明测量指标
简单 GET 请求返回固定字符串或简单对象Mean、Gen0、Allocated
复杂 JSON 序列化返回包含 20+ 字段的复杂对象序列化耗时、内存分配
参数绑定测试测试路由参数、QueryString、Body 绑定性能绑定耗时
数据库查询接口包含 LINQ to DB 查询的完整链路总耗时、数据库连接占用

测试结果示例

测试场景并发数RPSP95 响应时间P99 响应时间CPU内存
简单 GET1005,20012ms25ms15%200MB
简单 GET50018,00035ms68ms55%350MB
复杂 JSON1003,80028ms52ms25%280MB
复杂 JSON50012,00058ms110ms70%450MB
数据库查询1001,50065ms120ms35%320MB
数据库查询2002,200105ms210ms75%500MB

RPC请求压力测试

Hprose 是 HMX 平台内部 RPC 通信的核心组件,支持 TCP、HTTP、Unix Socket 等多种传输协议,并提供限流器、负载均衡、日志等插件能力。针对 Hprose RPC 的压力测试,主要评估远程方法调用在高并发场景下的吞吐量、响应延迟及系统资源消耗。

测试场景分类

场景类型方法数据量说明
轻量级Sum2个int参数测试基础 RPC 框架开销
中等负载Hello1个string参数模拟常见业务调用
重量级GetEntity返回20字段对象测试序列化/反序列化性能
批量传输GetBatch返回100-1000条记录测试大数据量传输
单向调用OnewayCall无响应等待测试异步提交通量

单服务端吞吐量(参考值)

传输协议方法类型QPSP95 延迟说明
TCPSum(轻量)80,000+< 1ms基础框架开销
TCPHello(字符串)50,000+< 2ms字符串序列化
TCPGetEntity(复杂对象)20,000+< 5ms20字段对象
TCPGetBatch(100)500+< 50ms批量传输
HTTPSum30,000+< 2msHTTP 额外开销
Unix SocketSum100,000+< 0.5ms进程间通信(Linux)

多服务端负载均衡

服务端数量QPS(Sum)负载均衡算法说明
2140,000+加权轮询线性扩展
4250,000+加权轮询接近线性
8400,000+加权轮询网络成为瓶颈

测试结果

测试场景并发数QPSP50P95P99CPU内存
Sum10035,0000.8ms1.2ms2.0ms25%150MB
Sum50080,0002.0ms5.0ms10.0ms65%300MB
Sum100075,0008.0ms15.0ms30.0ms85%450MB
Hello10025,0001.2ms2.0ms3.5ms30%180MB
GetEntity10012,0003.0ms6.0ms10.0ms35%250MB

二进制序列化性能测试

在分布式系统和微服务架构中,序列化是数据传输的核心环节。序列化性能直接影响系统的吞吐量、响应时间和网络带宽消耗。HMX 平台对三种序列化方案进行了全面的性能对比测试:

序列化方案说明适用场景
System.Text.Json.NET 官方 JSON 序列化库REST API、前后端交互、配置文件
Hprose.IOHprose 高性能二进制序列化库RPC 调用、跨语言通信
Protobuf.NETGoogle Protocol Buffers .NET 实现高性能微服务通信、gRPC
  • Hprose 性能优势的技术原理

根据 Hprose 官方技术文章,Hprose 3.0 for .NET 采用以下关键技术实现高性能:

技术手段说明
泛型序列化器/反序列化器通过 Serializer<T> 和 Deserializer<T> 泛型类缓存特定类型的序列化器,省去运行时类型判断查找的开销
双缓存机制泛型类 Instance 属性 + ConcurrentDictionary 静态缓存,兼顾编译期和运行期的类型获取效率
表达式树存取字段/属性替代反射和 Emit,生成接近硬编码执行效率的字段存取代码,同时保持代码可读性
表达式树创建对象通过 Factory<T> 工厂类预编译对象创建委托,比 Activator.CreateInstance<T>() 快 2-3 倍
特化序列化实现针对基本类型、数组、枚举、容器、DataSet/DataTable 等提供特化序列化器,避免通用逻辑开销

根据官方测试,Hprose 3.0 序列化性能比 Newtonsoft.Json 快约 1 倍。

  • 三、测试环境与方法

3.1 测试环境

组件配置
CPUIntel Core i7-12700K
内存32GB DDR4
操作系统Windows 11 / Linux
.NET 版本.NET 10
测试工具BenchmarkDotNet v0.14.x
  • 测试结果

序列化性能(10000 次操作)

序列化方案平均耗时内存分配相对速度
Hprose.IO约 12 μs约 35 KB基准 (1.0x)
Protobuf.NET约 19 μs约 43 KB0.63x
System.Text.Json约 22 μs约 39 KB0.55x

Hprose.IO 序列化性能最佳,比 Protobuf.NET 快约 58%,比 JSON 快约 83%

反序列化性能(10000 次操作)

序列化方案平均耗时内存分配相对速度
Hprose.IO约 18 μs约 38 KB基准 (1.0x)
Protobuf.NET约 25 μs约 42 KB0.72x
System.Text.Json约 42 μs约 43 KB0.43x

Hprose.IO 反序列化性能同样领先,比 Protobuf.NET 快约 39%,比 JSON 快约 2.3 倍

序列化后数据大小(单条记录)

序列化方案数据大小体积优势
System.Text.Json~1,200 B基准
Hprose.IO~680 B减少 43%
Protobuf.NET~650 B减少 46%

Hprose.IO 与 Protobuf.NET 数据体积相近,均比 JSON 减少约 45% 的大小

4.4 综合对比汇总

对比维度System.Text.JsonHprose.IOProtobuf.NET
序列化速度中等最快
反序列化速度中等最快
数据体积最大最小
可读性最佳
跨语言支持通用多语言(20+)多语言
调试便利性最佳一般一般
与 HMX 集成支持原生集成支持

HiMind 工业互联网平台 技术文档