东方小祖宗 - 性能缺陷优化 预览图

泰拉瑞亚 (Terraria)

东方小祖宗 - 性能缺陷优化

Both1.4.4Chinese

最后更新 2026/01/10文件 78.8 KBID 3639295748

模组简介

重要声明 目前(原模组 v1.1.5.819 版本),原模组通过修改 tModLoader 底层的 GetMod、TryGetMod、NewText 函数,使其检测调用来源是否是本补丁并进行拦截,从而造成功能性破坏。 这些拦截逻辑未公开于原模组的开源仓库,因此创意工坊下载的模组文件与 GitHub 不同。 原模组曾否定性能缺陷而拒绝优化,直到本补丁发布使其迫于压力而跟进优化,具体过程和截图可见于本补丁仓库。 因此我可以合理地怀疑,原模组因为恼羞成怒而对一个全功能可由用户自行决定开关的优化模组,进行功能拦截。 目前已被本补丁修复。 如需测试,请随意访问本补丁的源代码,尝试通过本补丁调用 TryGetMod 或 NewText,最后构筑模组文件并进入游戏测试 此处可访问本补丁的源代码仓库以及与原模组的评论截图 描述 我在游玩时发现原模组会导致帧率下降。 使用 Gemini 分析原作者公开的源码并初步测试后确定性能缺陷。 后因一些原因,我只好制作一个独立的优化补丁模组来展示和修复原模组中的性能缺陷。 性能详情可见本补丁模组的展示图片。 本补丁的代码公开于 Github,并附带导致我开发本补丁的详细历史因素。 本补丁未使用原模组中的任何资源文件(美术、音效等),甚至开发时未引用原模组的动态链接库。 直到原模组主动修复性能缺陷或更改实现逻辑为止,本补丁可有效降低性能负载。 未来进一步的优化方案,可能会通过分析更多的游戏状态数据,例如记录并缓存玩家当前召唤的模组宠物状态和启用的宠物能力状态等信息,创建更多卫语句将不必要的执行逻辑拦下来。 已实现。 主要更新内容 • 目前已适配至原模组 v1.1.5.819 版本。 • 代码结构经过大幅度模块化重构,从一个临时起意的模组变成了更容易扩展的模组; • 再次优化智能缓存,目前优化的函数仅会检查玩家启用的宠物,且使用常数级时间复杂度检查启用的宠物是否具有对应功能,理论上时间复杂度接近极限。 • 添加了“旧版模拟”模式,该模式其实并不优化代码,而是在独立的系统中复刻了原模组优化前的代码逻辑,启用后可以在新版本再次品尝每秒千万次的函数空调用。 • 不是更新内容,但值得一提:原模组目前已老实优化,当前版本采用了类似初版智能缓存的优化机制,因此可以放心使用原模组。 • 仍然不是更新内容,但是:如果原模组后续不再整什么优化花活,本补丁将随缘更新,最多看心情做些难以感知的小修小补。 次要更新内容请参考创意工坊页面的改动说明。 本模组主要由 Gemini 3 Pro 编写,并经过初步人工测试。 以下为 Gemini 编写的内容描述(创意工坊界面的描述主要由 Gemini 排版): 这个模组旨在修复 《东方小祖宗 ~ Ultimate pet force》 原版代码中存在的严重性能隐患,将不必要的 CPU 开销降低 99% 以上。 ⚠️ 为什么要用这个补丁?(原版性能缺陷解析) 原版模组在代码逻辑上存在一种“地毯式轰炸”般的低效检查机制,这在游戏后期或高分辨率下会成为帧数杀手。 通俗来说: 原版模组会对屏幕上的每一个土块、地图上的每一个 NPC、你背包里的每一个物品,在每一次更新时都强制询问所有 59 个东方宠物:“你要不要对这个东西产生效果?”——哪怕你根本没有开启这些宠物。 数据说话: 根据性能监控数据,在 2K 分辨率、60 FPS 下游玩时: • 原版行为: 每秒钟会进行最高可达 195,750 次的实体图块渲染函数调用,以及 11,549,250 次的宠物能力空调用。 • 内存灾难: 由于代码写法问题,原模组为了把局部变量传给宠物,使用了一个 Lambda 表达式。这 19 万次调用会产生海量的临时“垃圾数据”,迫使游戏频繁进行垃圾回收(GC),这正是导致游戏画面“周期性卡顿/掉帧”的罪魁祸首。 🛠️ 优化内容 本模组通过 动态挂钩 (Runtime Detour) 和 IL 注入 技术接管了原模组的高频逻辑,从代码底层解决性能问题: 1. 智能方法缓存 • 原版缺陷: 原模组在代码层面注册了 59 个宠物能力实例。无论这些宠物是否真的包含相关逻辑(例如是否有方块特效代码),原模组在运行时都会死板地遍历这全部 59 个实例。 • 优化原理: 优化补丁通过反射在加载阶段分析代码,识别出哪些宠物真正编写了对应的逻辑代码,哪些仅仅是使用了“什么都不做”的空基类方法。 • 效果对比: 优化前每次触发(如绘制方块特效)= 遍历调用 59 个方法(其中绝大多数是空跑)。优化后 = 仅调用那些真正重写了该函数的代码。如果只有 2 个宠物写了特效逻辑,就只调用 2 次;如果没有,则直接跳过,0 开销。 2. 消除垃圾内存分配 (Eliminate GC Allocations) • 原版缺陷: 原模组为了实现通用的遍历功能,使用了 Lambda 表达式和委托(Delegate)。这导致游戏在每次调用接口时(例如处理每一个方块的绘制),都会在内存堆上临时 new 一个委托对象。这种写法在极高频的调用下会制造海量“内存垃圾”。 • 优化原理: 重写了底层的调用循环,移除了所有委托对象的创建过程。现在,无论原来的函数被游戏调用得多么频繁,优化模组本身都不会产生额外的垃圾对象,从而彻底根除因 GC(垃圾回收)导致的周期性卡顿。 3. 调试监控面板 • 模组配置中提供了一个“性能监控”开关。开启后,您可以直观地看到优化补丁为您节省了多少次毫无意义的空方法调用。 🧩 模组兼容性与已知影响 1. Fancy Lighting (增强光照模组) • ⚠️ 警告: 该模组的“平滑光照 (Smooth Lighting)”功能会大幅增加泰拉瑞亚的物块绘制频率。 • 原版情况: 如果不装本优化补丁,开启平滑光照会导致原模组的性能开销翻倍,造成严重的 FPS 下降。 • 优化后: 即使开启平滑光照,性能开销也被控制在极低水平,流畅度大幅提升。 2. High FPS Support (高帧率支持模组) • ✅ 推荐: 该模组具有“实体图格优化”功能,能直接拦截大部分根本不需要调用的绘制函数。 • 联动效果: 它能从源头上大幅减少 DrawEffects 函数的调用总次数,配合本优化补丁的“单次调用降耗”,两者结合能达成“调用少”且“调用快”的最佳效果。 ⚙️ 配置说明 模组提供三种模式(在模组配置中调整): • 智能缓存 (默认/推荐): 保留所有宠物功能(如发光、特效),仅剔除无效计算。(完美体验) • 暴力截断: 直接禁止模组宠物对图块、NPC、物品的影响。仅建议在未启用相关宠物时使用。 • 关闭: 回退到原版逻辑(用于测试对比)。 Developed By 匿名

详情图片

条目信息

所属游戏
泰拉瑞亚 (Terraria)
创意工坊 ID
3639295748
文件名
3639295748.bin
文件大小
78.8 KB
最后更新
2026/01/10
内容版本
v1768056320-36a52901f32c761b
作者与来源
由原作者发布于 Steam 创意工坊。本站不改变署名,作者信息与原始内容请以 Steam 原始页面 为准。