这个项目能做什么

# 适用于《群星》、《异星工厂》等的 LargePageInjectorMods ## 简介 欢迎使用 LargePageInjectorMods!本模组通过优化内存管理,显著提升《群星》或其他游戏/应用程序的性能。 对其他游戏/应用程序的支持高度实验性且未经测试,可能无法正常工作。 ### 什么是内存分配器? 内存分配器是一种软件组件,负责在程序执行期间管理内存的分配和释放。高效的内存分配对于《群星》或《异星工厂》这类游戏至关重要,因为它能带来更流畅的性能。通过使用更高效的分配器(例如本模组引入的分配器),游戏的性能可以得到明显提升。 ### 为什么选择 mimalloc? mimalloc 由微软开发,是一种先进的内存分配器,在速度和内存碎片效率方面通常优于标准分配器。通过本模组将 mimalloc 集成到《群星》、《异星工厂》或其他游戏/应用程序中,游戏可以从更快的内存操作中受益,从而提升整体性能。[mimalloc GitHub](https://github.com/microsoft/mimalloc) ### 关于 DLL 注入 DLL(动态链接库)注入是一种方法,通过强制另一个进程加载动态链接库,从而在该进程的地址空间中运行代码。在 LargePageInjectorMods 中,我们利用 DLL 注入将《群星》的默认内存分配器无缝替换为 mimalloc,而无需修改游戏的可执行文件。 ## 性能提升 LargePageInjectorMods 可以提供显著的性能提升(性能仅针对《群星》进行过测试): - **标准性能提升**:小幅性能提升 4-5%,根据具体情况可能完全可以忽略,也可能显著更大。 - **启用大页后的增强性能**:启用大页后,模组可带来 5-80%+ 的性能提升。 - 使用 Ryzen 7800X3D 的《异星工厂》基准测试结果: - 未使用 Large Page Injector Mods [Factoriobox](https://factoriobox.1au.us/result/6ca27dcc-14a9-4484-8d2a-7d6da622462f):46 UPS - 使用 Large Page Injector Mods 和大页 [Factoriobox](https://factoriobox.1au.us/result/919e6097-5c70-4092-8ecb-4c1ea8cbba1a):54 UPS - 请注意,性能提升可能因你的存档(游戏进行得越后期、存档越重,性能提升应该越大)、你的硬件(通常在较弱硬件上性能提升更大)、你使用的模组等因素而剧烈变化。你的性能提升可能明显小于或大于上述任何数值。有硬件较弱的用户报告获得了 80% 的性能提升,因此大幅提升并非不可能。 ### 标准安装 1. **下载模组**:从 [Releases 页面](https://github.com/KeinNiemand/LargePageInjectorMods/releases) 下载适用于你的游戏/游戏版本的 ZIP 文件。 免责声明:某些杀毒软件(包括 Windows Defender)可能会误报 Injector.exe 为恶意软件,这是误报,因为杀毒软件将 DLL 注入视为可疑行为。如果你不信任我,可以阅读源代码并自行编译。 3. **定位游戏可执行文件目录**:找到《群星》/《异星工厂》/你想尝试的任何游戏安装所在的目录(即 stellaris.exe、factorio.exe 或游戏可执行文件所在的同一文件夹)。 4. **解压文件**:将下载的 ZIP 文件中的所有文件拖入《群星》安装文件夹。如果提示,点击“是”以替换文件。 5. **《群星》** 正常运行游戏,随附的 launcher-settings.json 会配置 Paradox 启动器运行 Injector,然后由 Injector 运行游戏。如果成功,游戏打开会多花几秒钟,并且在游戏打开前你会听到一声短促的蜂鸣声,表示成功。请注意,如果游戏更新,你可能需要再次替换 launcher-config.json 文件。 **其他游戏** 运行 Injector.exe,而不是直接启动游戏。 ### 启用大页的高级安装 要通过启用大页进一步提升性能,请按照以下步骤操作: #### 1. 授予 LockPagesInMemory 权限 首先,为你的 Windows 用户授予 `LockPagesInMemory` 权限: ##### 如何授予 LockPagesInMemory 权限 此权限是启用大页所必需的,可以通过本地安全策略编辑器(`secpol`)授予: 1. 按 `Win + R`,输入 `secpol.msc`,然后按 Enter。 2. 导航到 `安全设置` -> `本地策略` -> `用户权限分配`。 3. 找到并双击“锁定内存页”。 4. 选择“添加用户或组”,并添加你的用户账户。 5. 应用更改并重启计算机,以确保更改生效。 更详细的说明,请参阅 [Microsoft 文档](https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/lock-pages-in-memory)。 #### 2. 设置用于大页的 RAM 变量 将 LargePageInjectormods.toml 中的 `MIMALLOC_RESERVE_HUGE_OS_PAGES` 变量设置为 1 或更高(默认为 8)。该值表示要预留的大页 GB 数,理想情况下应大于你尝试运行的游戏/应用程序通常使用的 RAM。 #### 3. 系统要求和建议 - **少于 16GB RAM**:大页可能无效。 - **16GB RAM**:不要将环境变量设置得高于 4。可能需要重启 PC 并禁用不必要的自启动项,以确保有足够的连续 RAM。 - **32GB RAM 或更多**:建议将变量设置为 4 到 8 之间。 **注意**:连续 RAM 不足可能导致内存碎片问题。 ## 第三方库和致谢 本模组使用以下第三方库: - **Mimalloc**:[Mimalloc GitHub](https://github.com/microsoft/mimalloc) - **Sigmatch**:[Sigmatch GitHub](https://github.com/SpriteOvO/sigmatch) - **Hooking by Example**(不是库,但我复制了一些函数)[Hooking By Example Github](https://github.com/khalladay/hooking-by-example) - **Toml11**:[Toml11 GitHub](https://github.com/ToruNiina/toml11) ### 第三方许可证 - **Mimalloc 许可证**:[Mimalloc License](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/MIMALLOC_LICENCE.txt) - **Sigmatch 许可证**:[Sigmatch License](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/sigmatch_LICENSE.txt) - **Hooking by Example 许可证**:[Hooking by Example Licence](https://github.com/khalladay/hooking-by-example/blob/master/LICENSE) - **Toml11 许可证**:[Toml11 Licence](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/toml11_LICENSE.txt) ## 兼容性 ### 支持的游戏 - 《群星》 - 《异星工厂》 - 《十字军之王 2》(实验性)- 要运行,请将文件解压到 CK2 所在文件夹,并运行 injector.exe 启动游戏。尚未对该游戏进行性能测试。 本模组已针对上述列表进行测试,但只要其他游戏是 64 位原生应用程序并使用相同的 C 运行时库,也可能适用。欢迎报告/建议你成功使用本模组的游戏/应用程序,我可能会将它们添加到支持列表中。 请不要报告不受支持且无法运行的应用程序相关问题,除非你提交了使其可运行的拉取请求。 它应与受支持游戏的所有其他模组兼容。如果你遇到任何兼容性问题,请在此 GitHub 页面的“Issues”部分报告。 ### 已知问题 - **《群星》4.2**:目前与此版本的《群星》不兼容。 ## 配置文件格式 配置文件必须命名为 `LargePageInjectorMods.toml`。`configs` 文件夹中提供了示例配置。要使用示例配置,请将其重命名为 `LargePageInjectorMods.toml`。配置文件必须与 `Injector.exe` 以及要启动的游戏/应用程序位于同一文件夹中。 ### 示例配置(`LargePageInjectorMods.toml`) ```toml # 要启动的游戏/应用程序可执行文件路径 LaunchPath = "stellaris.exe" # 适用于《群星》 # LaunchPath = "factorio.exe" # 适用于《异星工厂》,取消注释 # 要用 mimalloc 修补的模块(DLL 或 EXE) ModulesToPatch = [ "stellaris.exe", # 主可执行文件 # 如需要,添加其他模块 # "example.dll", ] # 详细程度(0-4) Verbosity = 0 # 0 = 静默,1 = 错误,2 = 警告,3 = 信息,4 = 调试 # 将控制台输出重定向到 Injector(true/false) RedirectConsoleOutput = true # 设置为 true 以启用 # 注入后启用蜂鸣声(true/false) EnableBeep = true # 设置为 false 以禁用 # 要设置的环境变量 [Environment] #分配给大页的 RAM 量(GB),设置为 0 以禁用大页 MIMALLOC_RESERVE_HUGE_OS_PAGES = "8" #各种可能提升性能的 Mimalloc 环境变量 MIMALLOC_ARENA_EAGER_COMMIT = "1" MIMALLOC_PURGE_DELAY = "10000" MIMALLOC_RESET_DELAY = "10000" ``` ## 贡献 欢迎为 LargePageInjectorMods 做出贡献!如果你有改进建议或错误修复,请随意 fork 此仓库并提交拉取请求。 ## 许可证 本项目采用 MIT 许可证 - 详情请参阅 [LICENSE](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/LICENSE) 文件。 ## 致谢 - 感谢《群星》及其团队带来引人入胜的游戏。 - 感谢微软开发了 `mimalloc` 分配器。 - 特别感谢 Sigmatch 的开发者对软件社区的贡献。 ## 免责声明 本模组未获得《群星》创作者的官方认可。使用风险自负。