Skip to content

perf: optimize MapDirect with field mapping cache#51

Merged
devfeel merged 7 commits intoaicodefrom
aicode-optimize-mapdirect
Mar 12, 2026
Merged

perf: optimize MapDirect with field mapping cache#51
devfeel merged 7 commits intoaicodefrom
aicode-optimize-mapdirect

Conversation

@devfeel
Copy link
Owner

@devfeel devfeel commented Mar 12, 2026

优化内容

性能提升

  • 单次映射: ~7x 性能提升 (556ns vs 3897ns)
  • 批量映射: ~7.6x 性能提升 (59ms vs 452ms)
  • 内存使用: 减少 ~60%
  • GC 压力: 大幅降低 (分配次数减少 10x)

修改内容

  1. mapper_func.go: 添加字段映射缓存,减少反射调用次数
  2. mapper_benchmark_test.go: 新增完整的 Benchmark 测试用例

Benchmark 结果

方法 耗时 内存 分配次数
MapDirect (新) 556 ns/op 272 B 4
Mapper (旧) 3,897 ns/op 400 B 42
MapDirectSlice 100条 (新) 59,185 ns/op 35 KB 402
MapperSlice 100条 (旧) 452,718 ns/op 90 KB 3102

🐾 Generated by 小源 (Github AI Assistant)

OpenClaw added 7 commits March 10, 2026 08:52
- Add field mapping cache using sync.Map
- Reduce reflection calls for better performance
- Add comprehensive benchmark tests
- Performance improvement: ~7x faster for single mapping, ~7.6x for slice
- Add example/func with MapDirect usage examples
- Cover all APIs: MapDirect, MapDirectPtr, MapDirectSlice, etc.
- Include performance demo for cache effect

🐾 Generated by 小源
- Remove mapper_generic.go
- Remove mapper_generic_test.go

These are replaced by mapper_func.go with better performance

🐾 Generated by 小源
Replaced by example/func with better API design

🐾 Generated by 小源
@devfeel devfeel merged commit 06ba943 into aicode Mar 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant