Files
Raphael 0ea9199c44 perf: 降低主循环 CPU 占用并减少热路径分配
主循环与节流(SEnvir.cs):
- 主循环加条件 Sleep:处理快于 1ms 预算时 Thread.Sleep(1) 让出 CPU,处理慢时不 Sleep 保吞吐(空闲 CPU 100%→<10%)
- ActiveObjects 为空时直接 break,避免空集合在 1ms 时间片内空转
- 跨日 GC.Collect 由 Forced 改 Optimized,消除每日 STW 尖刺
- 无玩家且无持久化变更时跳过自动保存与备份:加 DataChanged 脏标志,WebApi 命令/支付处理/跨日公会重置后置标志,保存条件改为 (Players.Count>0 || DataChanged),保存后清标志(AutoClearUserDatas 清理幂等不置标志)
- 异常 catch 的 File.AppendAllText 改为入队 ErrorLogs,由 WriteLogsLoop 异步落盘,避免主循环被磁盘 I/O 阻塞

热路径去 LINQ 与分配(PlayerObject/MonsterObject/MapObject.cs):
- PlayerObject.Process 的每 tick HashSet 改为复用字段 _tagClearList
- MonsterObject.ViewRange 的 PoisonList.Any 改为每 tick Process 中刷新的 _hasAbyssPoison 缓存
- MapObject.CanBeSeenBy 的 Buffs.Any(Cloak||Transparency) 改为 ProcessBuff 每 tick 刷新的 _hasCloakOrTransparency 缓存
2026-09-09 20:15:47 +08:00

22 lines
816 B
Docker

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /zircon
ARG REPO=raphaelcheung/zircon-legend-server
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl jq unzip \
&& rm -rf /var/lib/apt/lists/*
# 自动拉取最新 release 的 linux-x64 包并解压
RUN ASSET_URL=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" \
| jq -r '[.assets[] | select(.name | endswith("linux-x64.zip")) | .browser_download_url][0]') \
&& if [ -z "$ASSET_URL" ] || [ "$ASSET_URL" = "null" ]; then echo "未找到 linux-x64.zip 资产" >&2; exit 1; fi \
&& echo "下载: $ASSET_URL" \
&& curl -fsSL "$ASSET_URL" -o /tmp/pkg.zip \
&& unzip -q /tmp/pkg.zip -d /zircon \
&& chmod +x /zircon/Server \
&& rm /tmp/pkg.zip
RUN mkdir -p datas Map
EXPOSE 7000 3000 7080
ENTRYPOINT ["./Server"]