perf: 深度优化消息内存占用
- 消息缓冲 Vec → VecDeque:原来溢出时 drain(0..n) 每条消息 O(n) 搬移,高频消息下产生大量拷贝;环形缓冲均摊 O(1),并按配置上限 预分配避免反复扩容 - connection_id/topic/payload 改 Arc<str>:引擎侧主题驻留 (10k 上限,超出整体重建),同主题数千条记录只存一份; 消息列表每帧克隆最多 300 条用于渲染,payload 共享后零拷贝 - 单条 payload 历史保留上限 256KB(retained_payload,UTF-8 边界安全截断),超大报文不再长期占据环形缓冲;消息行显示 「已截断」徽章;发布记录改用实际发送字节(修 Base64/Hex 历史内容与真实报文不一致的隐患) - live 测试适配 Arc<str>;补截断边界单元测试(22 个 lib 测试 + 2 个 live 测试通过)
This commit is contained in:
@@ -108,7 +108,7 @@ fn wait_subscribe(rx: &smol::channel::Receiver<EngineEvent>, topic: &str) -> boo
|
||||
|
||||
fn wait_message(rx: &smol::channel::Receiver<EngineEvent>, topic: &str) -> bool {
|
||||
pump(rx, Duration::from_secs(10), |ev| match ev {
|
||||
EngineEvent::Message(m) => m.topic == topic && m.payload == "hello-gpui",
|
||||
EngineEvent::Message(m) => &*m.topic == topic && &*m.payload == "hello-gpui",
|
||||
_ => false,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user