- 操作系统: macOS (darwin)
- 架构: arm64
- CPU: Apple M4 Pro
- Go版本: 1.21+
- 测试时间: 2025-09-28
| 测试项目 |
执行时间 (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 |
| 操作类型 |
执行时间 (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 |
- 内存效率: zorm 的内存使用相对稳定,在多线程环境下内存分配次数保持一致
- 并发性能: 在多线程环境下,zorm 的性能表现稳定,没有明显的性能衰减
- Map 操作优化: Map Update 操作性能优异,仅需 4,053 ns/op
- 查询开销: zorm 相比原生 SQL 有约 10% 的性能开销
- 内存开销: 相比原生 SQL,zorm 多使用约 16% 的内存 (7,873 vs 6,792 B/op)
- 分配开销: zorm 的分配次数略高于原生 SQL (250 vs 228 allocs/op)
- 字符串构建器池: 减少了 SQL 构建时的内存分配
- 参数切片池: 优化了参数收集过程的内存使用
- 缓存机制: 字段映射缓存减少了重复计算
- reflect2 使用: 相比标准 reflect 包,性能提升显著
- 零分配设计: 避免了不必要的内存分配
- 查询性能: zorm 相比原生 SQL 有约 10% 的性能开销,这是 ORM 框架的合理开销
- 内存使用: 内存使用增加约 16%,但提供了更好的开发体验和类型安全
- 并发性能: 在多线程环境下表现稳定,没有性能衰减
- 继续优化内存池: 进一步减少内存分配
- 缓存优化: 增强字段映射缓存机制
- 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