From 3f2eef45367fbd28691c4103f0175ae6cf30b07f Mon Sep 17 00:00:00 2001 From: duxin Date: Tue, 28 Jul 2026 16:55:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=8B=E9=87=8C=E9=87=91=E9=87=87?= =?UTF-8?q?=E6=A0=B7=E7=82=B9=E4=B8=8A=E9=99=90=E8=A7=A3=E9=99=A4=20?= =?UTF-8?q?=E2=80=94=20=E4=BF=AE=E6=AD=A3=E5=8F=AF=E7=94=A8=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=A3=80=E6=B5=8B=20+=20=E6=8F=90=E9=AB=98=E7=A1=AC?= =?UTF-8?q?=E4=B8=8A=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - psutil 在 Windows 下 available 因进程占用而偏低(4GB vs 实际 11-12GB), 改为 max(available, free) 获取更真实的内存余量 - 安全余量系数 0.5→0.6,兜底值 4GB→8GB - 硬上限 20000→50000,32GB 实测可安全容纳更多采样点 - 之前 45958 点 → 强制抽稀到 16384,损失了大量空间细节 --- src/postprocessing/map.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/postprocessing/map.py b/src/postprocessing/map.py index 6ac6d73..b72ed90 100644 --- a/src/postprocessing/map.py +++ b/src/postprocessing/map.py @@ -796,12 +796,15 @@ class ContentMapper: # 从系统内存动态估算可容纳的最大点数 try: import psutil - _avail_gb = psutil.virtual_memory().available / (1024**3) + _mem = psutil.virtual_memory() + # Windows 下 psutil.available 可能因进程占用而明显偏低, + # 同时参考 total free 作为可用内存的合理补充估算 + _avail_gb = max(_mem.available, _mem.free) / (1024**3) except Exception: - _avail_gb = 4.0 # 保守兜底 - # 计算安全点数:留 50% 余量给 Python 开销 - _MAX_VARIOGRAM_PTS = int(np.sqrt(max(_avail_gb * 0.5, 0.5) * 1024**3 / 8)) - _MAX_VARIOGRAM_PTS = np.clip(_MAX_VARIOGRAM_PTS, 3000, 20000) + _avail_gb = 8.0 # 保守兜底(32GB 标配) + # 变异函数内存 ≈ N²×8 bytes。留 40% 余量给 Python 开销 + _MAX_VARIOGRAM_PTS = int(np.sqrt(max(_avail_gb * 0.6, 1.0) * 1024**3 / 8)) + _MAX_VARIOGRAM_PTS = np.clip(_MAX_VARIOGRAM_PTS, 5000, 50000) if len(points) > _MAX_VARIOGRAM_PTS: # 空间分层抽样:网格覆盖全水域,每格保留1点