瓦尔海姆分析器_泽塔

创作者: Skarif
已更新:2026-02-22 20:20:02
164KB

关于此 MOD

一个用于对BepInEx模组进行游戏内CPU性能分析的开工具。可显示每个模组和每个方法的CPU负载、峰值警报、A/B快照对比以及报告导出。不适用于正常游玩。

Valheim Zeta 性能分析器

作者: 斯卡里夫
版本: 1.1.0
GitHub: SkarifWW/ProfilerValheim.Zeta
切换叠加层: F8


⚠️ 这不是一个玩法模组。
ProfilerValheim Zeta 不会向你的游戏添加物品、机制或任何内容。
这是一个 开发者与模组制作者工具 专为CPU性能分析、性能剖析而设计,
以及在运行中的英灵神殿游戏会话内对BepInEx插件程序集进行调试。
如果你是一名想提升FPS的普通玩家,这不是你需要的。


这是什么?

ProfilerValheim Zeta是一个 游戏内性能分析器 该工具在运行时利用Harmony钩子对其他BepInEx模组进行插桩,并测量每个模组每帧消耗的CPU时间——精确到单个方法级别。

与外部性能分析工具(如 dotTrace 或 Unity Profiler)的主要区别在于它运行于 在游戏内,真实游玩环境下在你的确切模组列表已加载的情况下,无需任何单独进程或构建配置。你只需按一个按钮,它就会扫描你已安装的模组,并立即开始显示实时数据。

它是为以下情况而设计的:

  • 装了三个新模组后我的帧数掉了——哪个是罪魁祸首?
  • 我正在优化自己的模组,需要看看哪些 更新() 方法才是瓶颈。”
  • 游戏每10秒卡顿一次。我需要抓住这个峰值,看看是什么原因导致的。

功能

实时CPU图表

在性能分析器窗口顶部绘制了一个滚动的300帧CPU负载图。

  • 白线 - 所有已追踪模组的总负载。
  • 彩色线条 - 最重的5个模组,每个都有各自颜色。
  • 橙线 - 最差帧滚动最大值,带缓慢衰减。这条线能揭示平均值会掩盖的尖峰。
  • 水平参考线 - 60 FPS(16.6 毫秒,绿色),30 FPS(33.3 毫秒,黄色),15 FPS(66 毫秒,红色)。
  • 交互式提示框 - 将鼠标悬停在图表上的任意点即可查看 总毫秒数, 最差毫秒,以及那一刻最重的模块的名称。

事件标记

按 标记事件 在游戏过程中的任意时刻——图表上会在那一帧精确出现一个绿色垂直标记。用它来将你当时正在做的事与图表上看到的内容关联起来(进入地下城、与宝箱互动、触发Boss等)。

每模组表格

图表下方是一个可排序的表格,列出了所有已扫描的模组:

列 描述
模组名称 BepInEx插件的程序集名称
平均CPU 每帧平均自身耗时(毫秒)
冲击 占总帧预算的百分比
次/秒 每秒插桩方法调用次数

撞击效果按颜色区分: 红色 超过5%, 黄色 超过1%。

方法下钻

点击模组表格中的任意一行即可展开并查看 十大最重单方法 在那次集会中——带着他们自己的 平均毫秒 和 次/秒这一功能将“模组 X 很慢”变成了“方法 更新 模组X内部才是瓶颈”。

搜索与筛选

  • 实时文本搜索按模组名称筛选表格。
  • 隐藏 < 0.1 毫秒 切换后,会从模组中移除那些小到无关紧要的噪声。

警报标签页

自动尖峰检测。任何超过 单帧16.6毫秒 (在60 FPS下丢帧的阈值)记录在警报日志中,内容如下:

  • 时间戳(HH:mm:ss)
  • 模组名称
  • 峰值毫秒

最多存储100条事件。标签页上显示当前数量。你可以随时清空日志。

A/B快照对比

专为迭代优化而设计:

  1. 查看你的当前状态 → 点击 保存为快照A.
  2. 对模组进行修改(或禁用某些内容)。
  3. 再次点击个人资料 → 点击 另存为快照B.
  4. 切换到 A/B 对比 切换选项卡查看增量表。

Delta 用颜色区分:🔴 红色表示模组变得更贵,🟢 绿色表示它得到改进。

导出到文件

点击 导出 将当前状态写入 .txt 报告文件位于:

BepInEx/profiler_reports/profiler_YYYY-MM-DD_HH-mm-ss.txt

报告包含完整的模组表及方法详情、所有尖峰警报、FPS和模组数量。便于与其他开发者分享或附加到错误报告中。


性能分析的工作原理

瓦尔海姆 Zeta 使用分析器 Harmony 前缀/后缀对 用于包装插桩方法。当 扫描模组 被按下时,它会遍历所有已加载的 BepInEx 插件,并将钩子应用到:

  • 更新(), 固定更新(), 延迟更新() 每个插件中所有组件的
  • 前缀 和 后缀 每个插件程序集中找到的每个Harmony补丁类的方法。

分析器本身不参与扫描,以避免自我测量。

自定时 是否计算正确:每个方法都会跟踪其子方法所花费的时间(通过每线程调用栈),并从自身经过的时间中减去该时间。这意味着如果 更新 呼叫 模组B.某助手,仅 模组B.某助手自己的时间计入 模组B - 不是ModA等待它所花费的时间。

所有样本采集都是线程安全的: 并发字典 + 联锁添加/交换 确保即使钩子从后台线程触发也不会发生数据竞争。


安装

  1. 安装 Valheim 的 BepInExPack.
  2. 丢弃 ProfilerValheim.Zeta.dll 进入 BepInEx/plugins/.
  3. 启动英灵神殿并加载一个世界。
  4. 按 F8 打开性能分析器叠加层。
  5. 点击 扫描改装 开始检测。

ℹ️ 扫描需要一些时间,具体取决于你安装了多少个模组。窗口顶部的状态栏会显示进度。你可以点击 停止扫描 随时 - 已应用的钩子保持激活状态。


性能分析器自身的性能影响

每个被插桩的方法调用都会经过一个 Prefix 和 Postfix 包装器。每次调用的开销是几百纳秒(两 秒表.获取时间戳() 调用以及一些栈操作)。在一个典型的包含30–50个模组的整合包中,这大约会累计到 0.1–0.5 毫秒 每帧总计——可见,但在诊断会话中不会破坏游戏。

当 停止监测 当被按下时,每个前缀的第一行就会禁用录制——开销降至仅一次分支检查,基本为零。


限制

  • 只有在启动时加载的模组才会被扫描。游戏启动后动态加载的程序集不会被自动发现。
  • 泛型方法和抽象方法无法被Harmony补丁,将被静默跳过。
  • 性能分析器仅测量托管 C# 代码,原生 Unity 引擎代码(渲染、物理、音频)不可见。
  • 静态 在……之前运行的构造函数和初始化代码 醒来 未被捕获。

模组开发者

如果你正在优化自己的模组,最有用的工作流程是:

  1. 安装好模组后加载游戏。
  2. 打开性能分析器(F8) 并击中 扫描改装.
  3. 在游戏中复现高成本场景。
  4. 在表格中点击你的模组所在行,即可展开方法级别的详细信息。
  5. 使用 标记事件 精确记录你触发该情景的时间戳。
  6. 点击 导出 并与你的团队分享该报告,或将其保存为基准。
  7. 做出修改,重启,从第3步重复。使用 A/B对比 量化进度。

兼容性

  • 英灵神殿 - 已在当前Steam版本上测试。
  • BepInEx - 需要 BepInExPack 5.4.22+。
  • 和谐 - 使用 0Harmony.dll 已随 BepInEx 打包;无需单独安装。
  • 其他模组 - 该性能分析器仅添加前缀/后缀钩子,绝不修改游戏逻辑。它可以安全地与任何玩法模组同时运行。但是,它会与任何自身修补了 更新 方法 - 这是预期且有意为之的行为。

源代码

完整源码见 github.com/SkarifWW/ProfilerValheim.Zeta.
欢迎提交问题和拉取请求。


Valheim Zeta 性能分析器——洞察你的模组包,修复卡顿问题。

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!