ThreatSourceLibaray/docs/test_result/performance_baseline_report_2025-06-04.md

3.9 KiB
Raw Blame History

ThreatSource项目性能基准测试报告

测试日期: 2025年6月4日
测试版本: 当前开发版本
测试环境: macOS (Apple Silicon)

📊 测试概述

本次测试旨在建立ThreatSource仿真库的性能基准识别关键性能瓶颈为后续优化工作提供数据支撑。

测试配置

  • 测试规模: 50个目标实体 + 20个导弹实体
  • 测试时长: 30秒
  • 目标帧率: 50 FPS (时间步长0.02s)
  • 测试模式: 实时仿真模式

🎯 关键性能指标

帧率性能

指标 数值 目标值 达成率
平均FPS 41.7 50.0 83.4%
平均帧时间 9.32ms 20ms 优秀
最小帧时间 0.20ms - -
最大帧时间 178.34ms <50ms 严重超标
95%分位数 40.21ms <20ms 需优化
99%分位数 57.25ms <30ms 需优化

内存使用情况

指标 数值 评估
起始内存 2.85MB 基线良好
结束内存 11.97MB 增长适中
峰值内存 14.25MB 可接受
内存增长 9.13MB 增长率0.30MB/s

垃圾回收分析 ⚠️

GC代数 总次数 频率(次/秒) 阈值 状态
Gen0 561 18.7 <5.0 严重超标
Gen1 478 15.9 <2.0 严重超标
Gen2 477 15.9 <0.5 严重超标
总计 1516 50.5 <8.0 内存分配风暴

📈 性能时序分析

测试过程中观察到明显的性能波动模式:

第1-15秒: 帧时间波动剧烈 (5-43ms)

  • 存在显著GC暂停
  • 帧时间不稳定

第16-30秒: 性能相对稳定 (0.8-1.1ms)

  • 可能进入稳态运行
  • 但内存使用仍在波动

🔍 问题根因分析

1. 内存分配风暴

  • 症状: Gen0 GC频率18.7次/秒,远超正常范围
  • 影响: 导致频繁的GC暂停帧时间大幅波动
  • 可能原因:
    • SimulationManager中大量临时对象创建
    • LINQ操作产生中间集合
    • 红外图像处理过程中的数组分配

2. GC暂停导致的帧时间跳跃

  • 症状: 帧时间从0.2ms跳跃到178ms
  • 影响: 严重影响实时仿真的流畅性
  • 根因: 频繁的Gen1/Gen2 GC触发

3. 内存使用模式不优

  • 症状: 内存使用呈锯齿状波动
  • 影响: 触发更多GC周期
  • 根因: 缺乏对象重用机制

🎯 优化建议

短期目标 (1-2周)

  1. 实现对象池模式: 针对高频创建的临时对象
  2. 优化LINQ使用: 使用预分配集合替代LINQ查询
  3. 减少装箱操作: 优化数值类型处理

中期目标 (1个月)

  1. 重构SimulationManager: 采用更高效的实体管理方式
  2. 优化红外图像处理: 使用Span和内存池
  3. 实现增量更新: 避免全量数据处理

长期目标 (3个月)

  1. 架构级优化: 考虑ECS(Entity Component System)模式
  2. 并行计算: 利用多核处理能力
  3. 内存布局优化: 提高缓存命中率

📋 验收标准

优化完成后,性能应达到以下标准:

指标 当前值 目标值 改善幅度
Gen0 GC频率 18.7次/秒 <5次/秒 73%↓
95%分位帧时间 40.21ms <20ms 50%↓
最大帧时间 178ms <50ms 72%↓
平均FPS 41.7 >45 8%↑

📝 测试重现步骤

# 运行性能基准测试
dotnet test --filter "RunPerformanceTest" --verbosity normal

# 运行快速验证测试  
dotnet test --filter "QuickPerformanceTest" --verbosity normal

📄 附录

详细帧时间数据

  • 测试期间共执行1250次更新循环
  • 帧时间分布呈现双峰模式
  • 存在明显的GC暂停间隔

内存分配热点

  • SimulationManager.Update()方法
  • 红外图像处理流水线
  • 导弹制导系统计算

报告生成: 自动化性能测试工具
下次测试计划: 性能优化实施后的对比测试