[P1/高] SessionService getMessages 未限制返回条数,超长会话可能 OOM #44

Open
opened 2026-07-21 21:56:09 +08:00 by thzxx · 0 comments
Owner

问题类型

缺陷 / 高 / 后端服务

文件位置

electron/services/session.service.ts

问题描述

getMessages 实现:

getMessages(sessionId: string) {
  return db.prepare('SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC').all(sessionId);
}

未限制返回条数。超长会话(10000+ 消息,含大量图片 base64):

  • 一次性加载到内存
  • 主进程内存占用激增
  • IPC 传输阻塞
  • 渲染进程 OOM

影响

  • 超长会话无法加载
  • 应用崩溃

建议修复

  1. 分页加载
getMessages(sessionId: string, options: { limit?: number; offset?: number } = {}) {
  const { limit = 200, offset = 0 } = options;
  return db.prepare(
    'SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC LIMIT ? OFFSET ?'
  ).all(sessionId, limit, offset);
}
  1. 懒加载:UI 滚动到顶部时加载更多
  2. 图片单独存储:base64 图片存为文件,messages 表仅存路径

建议组合实施。

## 问题类型 缺陷 / 高 / 后端服务 ## 文件位置 `electron/services/session.service.ts` ## 问题描述 getMessages 实现: ```ts getMessages(sessionId: string) { return db.prepare('SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC').all(sessionId); } ``` 未限制返回条数。超长会话(10000+ 消息,含大量图片 base64): - 一次性加载到内存 - 主进程内存占用激增 - IPC 传输阻塞 - 渲染进程 OOM ## 影响 - 超长会话无法加载 - 应用崩溃 ## 建议修复 1. **分页加载**: ```ts getMessages(sessionId: string, options: { limit?: number; offset?: number } = {}) { const { limit = 200, offset = 0 } = options; return db.prepare( 'SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC LIMIT ? OFFSET ?' ).all(sessionId, limit, offset); } ``` 2. **懒加载**:UI 滚动到顶部时加载更多 3. **图片单独存储**:base64 图片存为文件,messages 表仅存路径 建议组合实施。
thzxx added the ??????? labels 2026-07-21 21:56:09 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#44