From 3fadabd28b8f2c3c0241fbc61dfe7cce21d9f4f0 Mon Sep 17 00:00:00 2001 From: lgphone Date: Wed, 5 Mar 2025 15:08:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=AF=BB=E5=8F=96mong?= =?UTF-8?q?o=E6=96=87=E4=BB=B6=E6=80=A7=E8=83=BD=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=9B=A0=E6=89=A7=E8=A1=8CBuffer.concat=E8=BF=87?= =?UTF-8?q?=E5=A4=9A=E9=80=A0=E6=88=90=E7=AD=89=E5=BE=85=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=95=B4=E4=B8=AA=E6=9C=8D=E5=8A=A1hang=E4=BD=8F=E7=9A=84=20(#?= =?UTF-8?q?3985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果 Buffer.concat() 被频繁调用,尤其是在处理大量数据时,可能会导致内存分配压力增大,从而影响性能。 测试大于100M的PDF文件上传解析会导致/api/core/dataset/collection/create/fileId接口长时间无响应,其他接口也处于hang住的状态,导致整个服务不可用。 使用一次性拼接后问题解决 --- packages/service/common/file/gridfs/utils.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/service/common/file/gridfs/utils.ts b/packages/service/common/file/gridfs/utils.ts index 8f27a0718..1e0725e75 100644 --- a/packages/service/common/file/gridfs/utils.ts +++ b/packages/service/common/file/gridfs/utils.ts @@ -3,13 +3,16 @@ import { PassThrough } from 'stream'; export const gridFsStream2Buffer = (stream: NodeJS.ReadableStream) => { return new Promise((resolve, reject) => { - let tmpBuffer: Buffer = Buffer.from([]); + const chunks: Buffer[] = []; + let totalLength = 0; stream.on('data', (chunk) => { - tmpBuffer = Buffer.concat([tmpBuffer, chunk]); + chunks.push(chunk); + totalLength += chunk.length; }); stream.on('end', () => { - resolve(tmpBuffer); + const resultBuffer = Buffer.concat(chunks, totalLength); // 一次性拼接 + resolve(resultBuffer); }); stream.on('error', (err) => { reject(err);