✅ 示波器更新頻率降低
- 主視圖:20 FPS → 5 FPS(-75%)
- 個別通道:10 FPS → 1 FPS(-90%)
✅ 通道輪流更新
- 每次只更新 2/8 個通道(-75% 工作量)
- 不再每次更新全部 8 個通道
✅ 繪圖優化
- 加入
skipFiniteCheck=True(跳過數值檢查) - 加入
connect='finite'(忽略無限值) - 啟用
setClipToView(True)(只繪製可見範圍) - 啟用
setDownsampling(mode='peak')(降採樣)
✅ 攝影機解析度降低
- 從 480x360 → 320x240(-56% 像素)
- 預覽視窗同步縮小
✅ 記憶體釋放機制
- 主動釋放舊幀:
del self._cached_frame - 釋放 RGB 轉換後的幀:
del frame_rgb - 釋放舊 landmarks:
del self._cached_landmarks - 停止錄影時強制垃圾回收:
gc.collect()
✅ 快取管理
- 明確釋放不再使用的影像資料
- 避免累積大量未使用的物件
✅ Metal 後端(已在前次優化完成)
- PyQt6 Metal 渲染
- AVFoundation 硬體加速
- MediaPipe GPU 加速
cd /Users/akaihuangm1/Desktop/handProject_1103
source .venv/bin/activate使用三階段分析工具:
# 1. 終端 1:啟動程式
python main.py
# 2. 終端 2:執行效能分析(需要 sudo)
sudo python performance_profiler.py
# 3. 按照提示操作(每階段 15 秒):
# - 階段一:程式啟動後按 Enter(未連接)
# - 階段二:連接 EMG 後按 Enter(已連接)
# - 階段三:開啟攝影機後按 Enter(攝影機)
# - 自動生成報告在 performance_logs/ 目錄預期目標:
- CPU: <5%
- 記憶體: <400MB
- GPU: <10%
測試方法: 自動包含在完整效能測試中(階段一)
檢查項目:
- CPU 是否 <5%?
- 記憶體是否穩定?
- UI 反應是否流暢?
預期目標:
- CPU: <30%(從 122.7% 降至 <30%)⭐ 關鍵指標
- 記憶體: <400MB
- GPU: 20-30%
測試方法: 自動包含在完整效能測試中(階段二)
- 在程式中點擊 "Scan" 掃描裝置
- 選擇 EMG 裝置並點擊 "Connect"
- 等待基線校準完成(約 10 秒)
- 回到分析工具按 Enter 開始監控
檢查項目:
- CPU 是否 <30%?(優化前 122.7%)
- 示波器是否流暢更新?(雖然只有 5 FPS)
- 記憶體是否穩定不增長?
- 個別通道是否正常顯示?(輪流更新)
預期目標:
- CPU: <50%(從 136.9% 降至 <50%)⭐ 關鍵指標
- 記憶體: <500MB(從 4147MB 降至 <500MB)⭐⭐ 最關鍵
- GPU: 20-40%
測試方法: 自動包含在完整效能測試中(階段三)
- 保持 EMG 連接狀態
- 點擊 "Start Recording" 開始錄影
- 攝影機預覽視窗會自動開啟(320x240)
- 回到分析工具按 Enter 開始監控
- 工具會監控 15 秒
- 觀察記憶體是否持續增長
檢查項目:
- CPU 是否 <50%?(優化前 136.9%)
- 記憶體是否 <500MB?(優化前 4147MB)
- 記憶體是否穩定不持續增長?(最重要)
- 攝影機預覽是否流暢?(15fps)
- MediaPipe 手部追蹤是否正常?
- 示波器和攝影機是否同時運作無卡頓?
預期目標:
- 記憶體應該回到 <400MB
- 無殘留記憶體洩漏
測試方法:
- 點擊 "Stop Recording" 停止錄影
- 等待 2-3 秒(垃圾回收)
- 檢查記憶體是否下降
檢查項目:
- 記憶體是否明顯下降?
- 攝影機視窗是否關閉?
- 檔案是否正確儲存?
預期目標:
- 連續錄影 3 次後記憶體仍 <600MB
- 無累積性記憶體洩漏
測試方法:
- 開始錄影 → 錄 30 秒 → 停止
- 記錄此時記憶體使用量
- 重複步驟 1-2 共 3 次
檢查項目:
- 第 1 次錄影:記憶體 _____ MB
- 第 2 次錄影:記憶體 _____ MB
- 第 3 次錄影:記憶體 _____ MB
- 記憶體是否線性增長?(不應該)
請在測試後填寫實際數據:
| 階段 | 優化前 CPU | 優化後 CPU | 優化前記憶體 | 優化後記憶體 |
|---|---|---|---|---|
| 未連接 | 0.7% | _____ % | 342 MB | _____ MB |
| 已連接 | 122.7% 🔥 | _____ % | 350 MB | _____ MB |
| 攝影機 | 136.9% 🔥 | _____ % | 4147 MB 💥 | _____ MB |
- CPU(已連接):< 30%(優化前 122.7%)
- 記憶體(攝影機):< 500MB(優化前 4147MB)
- 記憶體不洩漏:重複錄影後 < 600MB
- CPU(攝影機):< 50%(優化前 136.9%)
- 示波器流暢(5 FPS 可接受)
- 攝影機預覽流暢(15 FPS)
- GPU 使用率 > 30%
- 無明顯卡頓或延遲
- 長時間運行穩定
可能原因:
- pyqtgraph 未正確應用優化設定
- 其他背景程序佔用 CPU
解決方法:
# 檢查 pyqtgraph 配置
import pyqtgraph as pg
print(pg.getConfigOptions())可能原因:
- 垃圾回收未生效
- OpenCV 內部緩衝區未釋放
解決方法:
# 強制垃圾回收(測試用)
import gc
gc.collect()可能原因:
- 5 FPS 太慢(可調整為 10 FPS)
解決方法:
# 修改 main_window.py line 206
self._plot_timer.setInterval(100) # 改為 10 FPS測試日期:_____________
測試人員:_____________
CPU 優化效果:
- 未連接:_____ %(目標 <5%)
- 已連接:_____ %(目標 <30%,優化前 122.7%)
- 攝影機:_____ %(目標 <50%,優化前 136.9%)
記憶體優化效果:
- 未連接:_____ MB(目標 <400MB)
- 已連接:_____ MB(目標 <400MB)
- 攝影機:_____ MB(目標 <500MB,優化前 4147MB)
使用體驗:
- 示波器流暢度:⭐⭐⭐⭐⭐ / 5
- 攝影機流暢度:⭐⭐⭐⭐⭐ / 5
- 整體穩定性:⭐⭐⭐⭐⭐ / 5
問題與建議:
是否通過測試: ☑️ 通過 / ☐ 未通過
- 更新 PERFORMANCE_MACOS.md 文檔
- 提交優化代碼到 GitHub
- 關閉相關 issue
- 記錄具體問題和數據
- 分析瓶頸所在
- 實施進一步優化
- 重新測試