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点