逗游网:值得大家信赖的游戏下载站!
发布时间:2014-12-09 10:18 来源:互联网 作者:aronchack 编辑:小猫
第三章 第1节-减少跳出(1)
收起前言:
什么是CTD?
CTD,就是Crush To Desktop 的简称,也就是在游戏的运行过程中,由于各种不同的原因,游戏进程被挂起或强制中止,而导致退出游戏。
造成CTD的主要原因有哪些?
1. 游戏本身系统机制问题(或者说游戏本身的设计缺陷。说起这个,猴纸一会再吐槽)。
2. Mod的问题。如数量太多,脚本过多,内容相互冲突等。
3. 机子性能瓶颈,装mod却不切实际,如显存与高清。
4. 存档问题。
5. 其它的未知原因。
在正式讲这个问题之前,我要先声明一点:
CTD是无法完全解决的,这个在四代就已经被证明过。
无数大神,高手经过多少努力,也无法完全根除这个顽症。
而在五代,猴纸通过查阅官网、S网,CK等技术文章,加上自己的试验和分析,认为五代在游戏本身的系统机制上,并没有很大的创新和进步。并且由于现阶段操作系统正处于32位和64位混杂的现实情况下,以B社历来那坑爹的内存机制管理模式,这个问题有可能被进一步放大!
造成这个原因的祸首,正是上古系列的最大优点,开放性!
既然无法根除,那我们就想点办法,减少其发生的机率。下面入正题。
第三章 第1节 优化游戏,减少跳出。
一、对游戏运行环境进行优化:
这里我给大家解释一个误区:所谓的4G补丁!
这里也是B社坑爹的一个原因。
他的内存管理机制相当的不好!非常容易溢出。
我用内存监视器hookWriteMemory和MemView等专业开发工具对上古五进行了长达一周的数据采样,基本上开着这两货玩游戏,其内存释放我都不想吐槽了,尼玛坑爹的是在一个Stack里我发现了三种不同的数据类型,8位FLOAT,8位INT,16位的FLOAT!(当然,这可能是MOD造成的)。
不过现在十号补丁打上后,从监测数据来看,比七号时好很多了,内存的释放及时多了。
另外为了证明我的想法,我采取了很多办法,无论我采取什么办法,游戏的内存使用值永远达不到4G,这还包括了当前的显存使用值!
有几个很典型的例子,他们使用了包括官方4G补丁在内的所有4G补丁,却并没有起到作用,这是为什么?
答案很简单:上古五是32位软件。(不必和我争,如果它是64位软件,你们的32位XP和WIN7根本就运行不了!B社出作品,必然要考虑到兼容性,这点上官方一查就知道!)
我这么一说,很多人会恍然大悟,由其是有计算机相关知识的。
举个例子:我有时玩下设计,机子上装了两个软件,一个是32位的CS3,一个是64位的MAX,很明显对比就是,我用CS3同时打开N多图片,到一定内存占用值时必死无疑!另一个MAX,最高开到6G都行!
这是由软件的寻址大小决定的,天生的,没法改!
不明白的请跳转到这里看:点击进入
不过这个人说的是理论值,在现实值中,一个32位的应用程序,能使用最大的内存大小为3.25G-3.75G之间,这还要算上游戏占用的显存值,部分显存也是要计入寻址编码的。
所以说,再大的内存,你也只能用这么多。
并且通常在WINDOWS的默认设置中,32位的应用程序,所能调用内存的值默认是2048(包括在64位系统中运行32位程序也是如此!),现在,我们就来解开这条限制!
但是我建议WIN7 64,32位系统,同时内存在4G以上的同学,做下面这一步:
1. 以管理员身份运行CMD(在开始菜单输入CMD,然后在CMD图标上点右键,先管理员运行。)
2. 在CMD中输入以下命令:
bcdedit(空格)/set(空格)IncreaseUserVa(空格)3072回车
重启计算机
【它的作用是将单进程内存上限可强制修改为3GB】
(适用于3.25G以上内存)
想要恢复则输入bcdedit(空格)/deletevalue(空格)IncreaseUserVa回车
重启计算机【恢复默认】
注意三点:
一是值只能是2048和3072(为什么不能更高你去问微软,微软官方网站有这条命令的说明!)
二是刚好4G内存的同学注意了,在玩游戏时,不要使用太占内存的软件,要知道,操作系统也是要占一定内存的。
三是别回来问我,为什么游戏才使用2G多一点的内存?用不到3G?我再说一遍,当前已经使用的显存中,有一小部分显存也要计入寻址空间!
微软官方网站相关说明:点击进入
此方法对32、64位WIN7,4GB内存以上配置有效,我自己用的就是!用hookWriteMemor监测过,确实能使用多点内存,减少因为内存释放不及时造成的CTD。
(另外32位系统的同学要注意了,见过不少同学4G以上内存装个32位系统的。见到这些同学我都不好怎么说,加上显卡的显存,你的操作系统只能识别到3.75G左右。即使用了网上的各种方法,例如PAE寻址-这个需要主板硬件支持!所能起的作用也有限。还是那句话,32位系统天生残疾,没辙!那么这些同学在用完这个命令后就要注意了,WIN7最少要占800M内存左右,XP是400M左右,在玩游戏时尽量把别的东西都关了吧!64位系统的话,使用这条命令可能会使你在运行一些64位的程序时也会受到限制,不过没有关系,到时用恢复命令就好了。而且64位软件现在相对较少。)
这是在系统层面改变进程,不修改游戏任何配置,无毒副作用。
另外,还可以采用的方法有:清理磁盘碎片,把游戏装到SSD上,这两招对使用了超高清的高清包的同学有明显好处,减少磁盘读取时间。
补充说明一点,别把WIN7的虚拟内存关掉,哪怕你的内存再大都好。
我的是8G,我哥们的16G,我们两个都没关,原因是有些应用程序必须要使用到虚拟内存,例如PS等软件。
担心老头五这玩意也有这么个设定,毕竟新游戏用D9核心,B社什么坑爹的事做不出来,反正我没关过。
有关过又很稳定的朋友记得回来告诉猴子一声。
二、对游戏本身进行优化:
1. 对ini文件中的游戏参数进行优化:
游戏一共有9个和游戏有关的ini文件。
CK官网链接,有兴趣的请跳转:点击进入
(其实是10个官网上也算少了一个,在游戏的Skyrim目录下还有一个叫Skyrim的文件夹,那还有一个Skyrim.ini,这货有什么作用我一直搞不懂,希望知道的告诉我!)
我们只根据官网的说明讨论以下两个ini文件,他们会被游戏使用(Used by the game):
在我的文档My GamesSkyrim目录下面有两个:
Skyrim.ini和SkyrimPrefs.ini
这两个ini的文件其实起的效果差不多,根据CK官网的介绍,以SkyrimPrefs.ini的设置为优先, SkyrimPrefs.ini里的设置会覆盖Skyrim.ini的相同参数的设置。
关于ini的手工设置教学请参考这两篇大作,写得很好:
《上古卷轴5:天际》优化设置 SkyrimPrefs.ini 详细解析:点击进入
感谢红烧茄子兄的努力与试验
浅见:虽然是来自辐射三的INI设置,但是只要上古五的INI文件有的参数,所起的作用是一样的,大家可以参考,对比一下,明白每个参数的作用。再次感谢茄子兄的努力,我也是拜读了他的大作不下十次。
Skyrim.ini优化 12.18大更新:点击进入
感谢CMD本人兄的努力与试验
对于缓冲的见解很独到。
[原创] 优化的真正核心—上古卷轴5:天际SkyrimPrefs.ini设置解析:点击进入
感谢超频爱好者版主的努力。
对于ini参数在游戏中画面的影响有很独到的见解。
猴子为什么在这方面不提出自己的见解,是因为以上几位基本上把ini对游戏的影响说到位了,猴子在这方面并不比他们强,甚至不如人家。
猴子是实在人,这是教学贴,需要的是严谨,就不提出一些子虚乌有见解来哗众取宠了。请谅解。请移步拜读几位的大作!
大家在看完上面的大作后,对ini设置有一定了解后,想动手设置的话,我给大家推荐一个工具,方便大家设置:
天际INI详细配置工具(Skyrim INI Tweaker):点击进入
xiaoma3000版主的汉化
对于实在是不想自己动手的同学,请下载这个软件:
【ARROW&KNEE MOD TEAM™】『上古卷轴5优化工具』增加流畅减少顿卡跳出,更新v1.1修复BUG!支持原版、DLC!:点击进入
BoneAsh的力作,懒人专用,一键搞掂。使用方法我在一楼说了,请自行查阅!
2. 优化ini中的Papyrus脚本设置(很重要,这方面很多人在认识上有误区!)
其实这也是在ini中设置,为什么猴纸要单独分开来讲?
这是因为有关这项设置,有很多人被误导了。
包括N网的一些设置,N网也是个鱼龙混杂的地方,有高手,也有2B,外国的月亮并不比国内的圆!
这里都要求在我的文档My gamesSkyrimSkyrimSkyrim.ini,找到[Papyrus]组,在其下添加命令行:
iMinMemoryPageSize=100000
iMaxMemoryPageSize=5000000
iMaxAllocatedMemoryBytes=1800000000
为什么猴子如此断定这些设置并不一定有效,反而有可能会起到反效果呢?
首先,我们来说说Papyrus的运行机制:
A. 先给同学们科普一下编程知识:
机器语言:我们平时玩的游戏也好,用的软件也好,在电脑的眼里,就是一个个0和1的数字。如0111(4位)、11001101(8位),这些二进制代码才是电脑可以执行的命令,我们称之为机器语言。
汇编语言:比机器语言高级的是汇编语言,基本上所有程序开发,在编译时,都要将我们写好的程序先编译成汇编语言。
高级语言:简单的说这是为了方便程序员开发的一种平台,使我们不用10101001这样来撸代码,也不用使用冗长的汇编语言来开发。
一般的程序开发,在开发结束后,会最终编译成电脑可直接运行机器码。
B.我们来了解一下上古的脚本运行机制有何不同?
而上古的脚本函数则不然,就算我们这些Modder在开发完毕后,使用CK进行编译后得到的可执行脚本PEX文件,仍然不能直接被电脑所识别和运行,他们仍然要在游戏内核中进行最终编译!
上图:
从上图可以看出,CK只是对源码文件进行了最初的编译,这种编译,仅仅是为了让游戏能识别,这种代码,是不能被计算机直接运行的。
所以,在最终被游戏调用时,游戏内核还要对脚本PEX文件进行最后编译,以转换为可执行代码。我将其称之为二次编译(2nd Debug):
而我在这里要说的,就是对ini里的参数进行优化,影响我们可以干预的那两步。提高系统性能。