马上注册领取绝版勋章
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Skyrim Memory Optimizer
- 原作者 : 爱的圆周率~
Skyrim 是一个32位应用程序,在高内存使用情况下,它可能会崩溃。 Skyrim Memory Optimizer 可以帮助你解决此问题,它还可以更好地管理Skyrim的内存 !
前置需求 :
2. Microsoft Visual C++ Runtime Library for Visual Studio 2015, 2017 and 2019 :
3. .NET Framework 3.5(Win 7 SP1 及以上自带)
游戏版本需求 :The Elder Scrolls V : Skyrim 1.9.32.0 ,新插件添加了检测 Skyrim 32-bit 版本的代码,版本不对可能无法正常工作。 (图片里的代码是旧版本的,以后的LOG信息不会是这些)
1. 内存交换 :Skyrim Memory Optimizer 将创建一个名为 Memory Optimizer.exe 的进程,该进程在后台实时监控Skyrim进程,并在内存使用量达到一定值时尝试写入页面文件,以防止由于以下原因导致崩溃:高内存使用率。我在这一部分的代码中写了一个特殊的算法:它将自动为 Skyrim 32-bit 计算最合适的内存使用率,并将游戏的内存使用率控制在此范围内,这不会影响性能!它不会对游戏造成任何不好的影响。 2. 分配虚拟地址空间 :Skyrim Memory Optimizer 将接管游戏进程的虚拟内存空间,并与内存交换一起使用,以确保游戏的内存性能。
3. 创建静态内存单元 :创建适合 Skyrim 32-bit 大小的内存块,这可能有助于提高分配效率,应该注意的是,这并不能取代SKSE的内存补丁。
4. 内存分配器 :另一个独立的插件,它不依赖 Skyrim Memory Optimizer ,它曾经是 Skyrim Memory Optimizer 的一部分,但是由于兼容性问题,我将其与主要文件分开,你需要安装 Skyrim Memory Optimizer - Allocator 才能使内存分配器生效。为 Skyrim 32-bit 创建一个动态内存池,更智能地分配和释放内存,提高内存性能和内存利用率。
5. 修复无限载入 :Skyrim 32-bit 为什么会发生无限载入呢?我在这里阐述一种较为常见的,接下来讲述的原理如果没有编程经验的可以跳过它,Skyrim 32-bit 在载入过程中需要加载很多对象,那必然需要分配内存,当分配的内存较大时,内存可能会不够,Skyrim 32-bit 就会尝试释放自身内存,并调用 WaitForSingleObject 函数等待释放内存的过程,但有时候传递给等待函数的时间参数被设置成了无穷大,那么这个函数被执行后就一直等待,就造成了我们常见的无限载入,Skyrim Memory Optimizer 尝试用一段强大的汇编来跳过这个等待过程: 淡绿色高亮的地址就是 Skyrim 32-bit 执行等待函数代码的地址,这段汇编将将跳过这个过程,直接跳转到内存分配阶段,这种无限载入理论上就不会再出现(可能只是载入时间很长,而不是无限载入。) 6. 修复载入崩溃 :Skyrim 32-bit 载入发生崩溃的一个较为常见原因,接下来讲述的原理如果没有编程经验的可以跳过它,Skyrim 32-bit 的载入崩溃,排除损坏了的存档数据,大概率是由多线程引起的,贝塞斯达的程序员可能忘记在某些代码中安装互斥锁,在加载大量数据的情况下,可能会出现一个线程提前读取另一个线程还没有完成的数据,这就导致了载入时的崩溃,想必很多人都知道 Load Game CTD Fix ,它解决这个问题的方法就是在载入时限制只有一个CPU核心的使用,这样线程就不可能提前读取未完成的另一个线程的数据,但这会使游戏载入变慢,而 Skyrim Memory Optimizer 解决此问题的原理是锁定所有CPU核心,载入时间不会受影响,而且它依旧可以有效的防止读档崩溃。
用户的反馈参考 :
兼容性说明
1. Skyrim Memory Optimizer - MainFile :包含 Skyrim Memory Optimizer 的主文件,理论上,它与任何插件都兼容。 该插件的工作原理与其他插件可能会有很大的不同。 除了插件的基本优化和修复功能之外,我还编写了一个内存监视可执行文件,该文件位于DLL中。 它被注入并在后台运行以监视 Skyrim 32-bit 进程,你可以查看我上传的图片以找到相关内容 :
2. Skyrim Memory Optimizer - Allocator :包含一个独立的内存分配器插件,我将它与主文件分开是因为它与 Crash Fixes 有一些兼容性问题,如果你使用 Crash Fixes 的 UseOSAllocators = 1 ,则 Skyrim Memory Optimizer 的 内存分配器 可能无法正常工作,因此我特意在此处说明,不过即使将其与 Crash Fixes 一起使用也不会造成对游戏造成任何影响,Skyrim Memory Optimizer - Allocator 的部分代码依旧会生效。
一些可能出现的兼容性问题及其解决方案
1. 如果你安装了ENB,并同时使用 Skyrim Memory Optimizer - Allocator ,它可能会提示你 内存分配器 无法正常分配内存,尝试将 ExpandSystemMemoryX64 设为 false 。
配置文件中没有详细的注释,请看以下内容来了解如何调整 Skyrim Memory Optimizer 的配置文件 :
---------------------------------------------------Skyrim Memory Optimizer.ini---------------------------------------------------
[MAIN]
; 游戏可执行文件名称,默认为 TESV,无需添加“ .exe”
ExecutableFileName = TESV
; 控制台输出的内存信息,暂时无用
ConsoleInformationOutput = true
; 开发和调试选项
EnableDebuggingInformation = false
; 支持 (Chinese , English , Russian),一些提示信息的翻译
Language = Chinese
[MEMORY]
; 启用内存交换,解决内存不足导致的崩溃问题
EnableMemorySwap = true
; 重新分配交换的内存,以获得更好的内存性能,你可以关闭内存交换并单独打开此选项以获得更好的性能 !
ReallocateSwapMemory = false
; 丢弃交换内存的缓存,可能会影响内存性能和加载时间,只有在严重内存不足时才使用它
RemoveSwapMemoryCache = false
; 推荐值 1800
MemorySwapBlockSize = 1800
; 推荐值20 - 100
MemorySwapCycle = 50
; 接管虚拟内存空间,确保游戏的内存性能
EnableAllocVirtualAddressSpace = true
; 分配类型,暂时无用,默认为COMMIT
VirtualAddressAllocationType = COMMIT
[ALLOCATOR]
; 创建一个静态内存单元,在分配内存时使用固定大小的内存块,这样可以提高内存分配效率,但是不释放内存可能会导致内存泄漏请知晓
CreateStaticMemoryUnits = true
; 静态存储单元长度
StaticMemoryUnitLength = 1024
; 静态内存单元缓冲区的数量,决定分配效率
StaticMemoryUnitBuffers = 1024
; 未清零的内存将导致内存浪费请知晓
StaticMemoryUnitsAutoClear = true
[OPTIMIZATION]
; 3为实时,2为高,1高于正常,0为正常,-1低于正常,-2为低,设置3可能会引起问题
SetProcessPriorityClass = 2
; 提高多核CPU利用率
EnableProcessMultithreadingOptimize = true
[FIX]
; 修复无限加载,如果在加载过程中崩溃,请尝试将其设置为false
FixInfiniteLoad = true
; 修复加载崩溃,这可能会更快
FixLoadCrash = true
; 修复由线程错误导致的崩溃,这将直接导致游戏性能降低一半以上
EnableUnsafeThreadCrashFix = false
---------------------------------------------------分割线---------------------------------------------------
Skyrim Memory Optimizer 更新日志:
-Skyrim Memory Optimizer - MainFile 1.1 更新记录:
1. 用“ push [esp]”替换“ push ecx; push ecx”,用“ pushad”和“ popad”替换效率较低的程序集,用“ mov [esp]替换“ pop ecx; mov ecx; push ecx” “。 哦,这些很难理解,但是它们也许可以提高运行效率。
2. 已删除配置文件中未知语言条目的说明,详细说明可在MOD说明中找到。
3. 更正了配置文件中错误的配置项值。
4. 减少误报问题
-Skyrim Memory Optimizer - MainFile 1.2 更新记录 :
1. 修复了某些用户无法启动游戏的错误。
2. 修复了功能判断错误的问题。
Skyrim Memory Optimizer - Allocator (1.1 - 1.4)更新记录:(嫌麻烦,写在一起)
1. 修复了各种游戏过程中可能出现的bug。
你可以在这里看到 上古卷轴4:湮灭 Oblivion 版本的同款 Obse 内存优化插件 :https://www.nexusmods.com/oblivion/mods/50357
历史版本下载 :
提供 Skyrim Memory Optimizer 文件下载
Skyrim Memory Optimizer - MainFile 1.2 :
描述 :Skyrim Memory Optimizer 的主文件(默认中文)提供英语和俄语翻译,可在INI中进行更改。
病毒扫描结果 :https://www.virustotal.com/gui/file/abdfdb6e88c906510559b0cb7bb41d2078a81bfbc134c5b7747b2add0d49825f/detection
Skyrim Memory Optimizer - Allocator 1.4 :
描述 :有关某些兼容性问题,请参考MOD说明。
病毒扫描结果 :https://www.virustotal.com/gui/file/176101bf136f4102749bd40a4404e2de8b82f39c2003e5ee827c5cfa8a41758b/detection
|