Skip to content

Latest commit

 

History

History
84 lines (64 loc) · 3.04 KB

File metadata and controls

84 lines (64 loc) · 3.04 KB

zorm 性能测试报告

测试环境

  • 操作系统: macOS (darwin)
  • 架构: arm64
  • CPU: Apple M4 Pro
  • Go版本: 1.21+
  • 测试时间: 2025-09-28

基准测试结果

1. 查询操作性能对比

单线程性能

测试项目 执行时间 (ns/op) 内存使用 (B/op) 分配次数 (allocs/op) 相对性能
zorm Select 23,072 7,873 250 基准
原生 SQL 20,897 6,792 228 1.10x 更快

多线程并发性能

线程数 zorm Select (ns/op) 原生 SQL (ns/op) zorm 相对性能
1 23,072 20,897 1.00x
2 21,441 19,845 1.08x
4 21,206 19,613 1.08x
8 22,219 19,713 1.13x

2. Map 操作性能

操作类型 执行时间 (ns/op) 内存使用 (B/op) 分配次数 (allocs/op)
Map Insert 216,575 2,393 53
Map Select 25,183 8,784 314
Map Update 4,053 1,473 36

性能分析

优势

  1. 内存效率: zorm 的内存使用相对稳定,在多线程环境下内存分配次数保持一致
  2. 并发性能: 在多线程环境下,zorm 的性能表现稳定,没有明显的性能衰减
  3. Map 操作优化: Map Update 操作性能优异,仅需 4,053 ns/op

性能开销

  1. 查询开销: zorm 相比原生 SQL 有约 10% 的性能开销
  2. 内存开销: 相比原生 SQL,zorm 多使用约 16% 的内存 (7,873 vs 6,792 B/op)
  3. 分配开销: zorm 的分配次数略高于原生 SQL (250 vs 228 allocs/op)

性能优化效果

内存池优化

  • 字符串构建器池: 减少了 SQL 构建时的内存分配
  • 参数切片池: 优化了参数收集过程的内存使用
  • 缓存机制: 字段映射缓存减少了重复计算

反射优化

  • reflect2 使用: 相比标准 reflect 包,性能提升显著
  • 零分配设计: 避免了不必要的内存分配

结论

性能表现

  • 查询性能: zorm 相比原生 SQL 有约 10% 的性能开销,这是 ORM 框架的合理开销
  • 内存使用: 内存使用增加约 16%,但提供了更好的开发体验和类型安全
  • 并发性能: 在多线程环境下表现稳定,没有性能衰减

优化建议

  1. 继续优化内存池: 进一步减少内存分配
  2. 缓存优化: 增强字段映射缓存机制
  3. SQL 构建优化: 减少字符串拼接操作

总体评价

zorm 在保持高性能的同时,提供了丰富的功能和良好的开发体验。10% 的性能开销在 ORM 框架中是合理的,特别是考虑到其提供的类型安全、自动映射和丰富的查询功能。

测试命令

# 基础性能测试
go test -bench=. -benchmem -benchtime=5s

# 并发性能测试
go test -bench=BenchmarkZormSelect -benchmem -benchtime=10s -cpu=1,2,4,8

# Map 操作测试
go test -bench=BenchmarkMapOperations -benchmem -benchtime=5s