From 437aefea6e0d236f85e4853f08883d2f25aa0e49 Mon Sep 17 00:00:00 2001 From: troytt <47798984@qq.com> Date: Mon, 14 Sep 2026 09:28:07 +0800 Subject: [PATCH] =?UTF-8?q?verify-tiles:=20=E7=BB=99=20DT1=20=E5=BA=93?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=8A=A0=E4=B8=8A=E9=99=90=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E8=B7=91=E5=85=A8=E9=87=8F=E6=97=B6=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B6=A8=E5=88=B0=E6=95=B0=20GB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解码出来的 DT1 库很占内存(每个瓦片的块像素是 width×bitmapHeight 的 Uint8Array,一个库几十 MB), 原来无限缓存跑完 35 关会到 GB 级。与打包器一致地限制为同时 16 个库(比任何单一关卡类型用到的都多, 所以一关之内不会重复解码)。实测:全量跑 35 关峰值 RSS ≈ 1.9 GB,堆上限 2 GB,结束后立即回落。 顺带记录本地实测结果(7/7 通过): 地面 28704 槽 / 墙 9514 槽 / 屋顶 492 槽 地面槽类型全为 0(0 个错配)、墙/屋顶没画地面瓦片、looseRefs 0、missingTiles 0、位置公式 0 不符、 411/411 个顶角右半都带了 type-4 伙伴、缺失伙伴 0 --- scripts/verify-tiles.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/verify-tiles.ts b/scripts/verify-tiles.ts index 2b976bf..463958c 100644 --- a/scripts/verify-tiles.ts +++ b/scripts/verify-tiles.ts @@ -61,7 +61,12 @@ async function main(): Promise { archives.add(name, await MpqArchive.open(await fileSource(`${DIR}/${name}`))) } const tables = await loadActTables(archives) + // 解码出来的 DT1 库很占内存(每个瓦片的块像素是 width×bitmapHeight 的 Uint8Array, + // 一个库几十 MB),无限缓存跑完 35 关会涨到数 GB。跟打包器一样加个上限: + // 16 个库比任何单一关卡类型用到的都多,所以一关之内不会重复解码,内存曲线保持平坦。 const libraryCache = new Map() + /** 同时保留解码结果的 DT1 库上限。 */ + const LIBRARY_CACHE_LIMIT = 16 let levels = 0 let floors = 0 @@ -92,6 +97,10 @@ async function main(): Promise { try { const decoded = decodeDt1(await archives.read(name)) libraryCache.set(name, decoded) + if (libraryCache.size > LIBRARY_CACHE_LIMIT) { + const oldest = libraryCache.keys().next().value + if (oldest !== undefined && oldest !== name) libraryCache.delete(oldest) + } libs.push(decoded) } catch { /* 缺库时 verify:acts 会报 */ } }