适合大多数 ESP32 项目,包括 xiaozhi-esp32:
工作线程池: 2 个
工作线程栈: 3KB
调度器栈: 6KB
回调任务栈: 6KB
总内存占用: ~22KB (70% 减少)CONFIG_SIGNALR_WORKER_POOL_SIZE=1
CONFIG_SIGNALR_WORKER_STACK_SIZE=2048
CONFIG_SIGNALR_SCHEDULER_STACK_SIZE=4096
CONFIG_SIGNALR_CALLBACK_STACK_SIZE=4096
# 内存占用: ~12KB
CONFIG_SIGNALR_WORKER_POOL_SIZE=4
CONFIG_SIGNALR_WORKER_STACK_SIZE=4096
CONFIG_SIGNALR_SCHEDULER_STACK_SIZE=8192
CONFIG_SIGNALR_CALLBACK_STACK_SIZE=8192
# 内存占用: ~32KB
CONFIG_SIGNALR_WORKER_POOL_SIZE=2
CONFIG_SIGNALR_WORKER_STACK_SIZE=3072
CONFIG_SIGNALR_CALLBACK_STACK_SIZE=6144
CONFIG_SIGNALR_SKIP_NEGOTIATION=n
CONFIG_SIGNALR_ENABLE_DETAILED_LOGS=n
# 内存占用: ~22KB (默认配置)
idf.py menuconfig
# 导航到: Component config -> ESP32 SignalR Client Configuration# 添加到项目的 sdkconfig.defaults
CONFIG_SIGNALR_WORKER_POOL_SIZE=2
CONFIG_SIGNALR_CALLBACK_STACK_SIZE=6144
#include "esp_system.h"
ESP_LOGI(TAG, "Free heap: %d", esp_get_free_heap_size());
ESP_LOGI(TAG, "Min free heap: %d", esp_get_minimum_free_heap_size());#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
UBaseType_t watermark = uxTaskGetStackHighWaterMark(NULL);
ESP_LOGI(TAG, "Stack watermark: %d bytes remaining", watermark * sizeof(StackType_t));解决方案:
# 增加回调任务栈大小
CONFIG_SIGNALR_CALLBACK_STACK_SIZE=8192
解决方案:
# 增加工作线程数
CONFIG_SIGNALR_WORKER_POOL_SIZE=3
解决方案:
- 减少工作线程数
- 减少栈大小
- 启用
CONFIG_SIGNALR_SKIP_NEGOTIATION
| 配置 | 内存占用 | 适用场景 |
|---|---|---|
| 最小 | ~12KB | 简单应用,内存极度紧张 |
| 默认 | ~22KB | 大多数应用(推荐) |
| 高性能 | ~32KB | 高并发,内存充足 |
| 原始未优化 | ~64KB | ❌ 不推荐 |
使用默认配置即可,总内存占用预估:
SignalR: 22KB
MQTT: 10KB
WebSocket: 10KB
语音处理: 20KB
其他: 20KB
-------------
总计: 82KB (占 ESP32 可用 SRAM 约 25%)
安全!✅
- 详细优化报告: OPTIMIZATION_REPORT.md
- 快速开始: docs/QUICKSTART.md
- 集成指南: docs/INTEGRATION_GUIDE.md