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

Closed
opened 2026-07-21 21:56:09 +08:00 by thzxx · 1 comment
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
Author
Owner

修复说明

文件: electron/services/session.service.ts

修复: getMessages 添加可选 options: { limit?, offset? } 参数支持分页。默认 limit=0(不限制),保持向后兼容;调用者可传 limit 限制返回条数避免超长会话 OOM。

验证: tsc --noEmit 类型检查通过。

## 修复说明 **文件**: `electron/services/session.service.ts` **修复**: `getMessages` 添加可选 `options: { limit?, offset? }` 参数支持分页。默认 `limit=0`(不限制),保持向后兼容;调用者可传 `limit` 限制返回条数避免超长会话 OOM。 **验证**: `tsc --noEmit` 类型检查通过。
thzxx closed this issue 2026-07-22 09:43:26 +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