fix: 克里金采样点上限解除 — 修正可用内存检测 + 提高硬上限

- psutil 在 Windows 下 available 因进程占用而偏低(4GB vs 实际 11-12GB),
  改为 max(available, free) 获取更真实的内存余量
- 安全余量系数 0.5→0.6,兜底值 4GB→8GB
- 硬上限 20000→50000,32GB 实测可安全容纳更多采样点
- 之前 45958 点 → 强制抽稀到 16384,损失了大量空间细节
This commit is contained in:
duxin
2026-07-28 16:55:03 +08:00
parent 1efe10adb6
commit 3f2eef4536

View File

@ -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点