BY 树下肥猴![](static/image/smiley/coolmonkey/02.gif)
***************************************************
前言
***************************************************
前言:
什么是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,这还包括了当前的显存使用值!
答案很简单:上古五是32位软件。(不必和我争,如果它是64位软件,你们的32位XP和WIN7根本就运行不了!B社出作品,必然要考虑到兼容性,这点上官方一查就知道!)
我这么一说,很多人会恍然大悟,由其是有计算机相关知识的。
不过这个人说的是理论值,在现实值中,一个32位的应用程序,能使用最大的内存大小为3.25G-3.75G之间,这还要算上游戏占用的显存值,部分显存也是要计入寻址编码的。
所以说,再大的内存,你也只能用这么多。
并且通常在WINDOWS的默认设置中,32位的应用程序,所能调用内存的值默认是2048(包括在64位系统中运行32位程序也是如此!),现在,我们就来解开这条限制!
但是我建议WIN7 64,32位系统,同时内存在4G以上的同学,做下面这一步:
注意三点:
一是值只能是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文件。
(其实是10个官网上也算少了一个,在游戏的Skyrim目录下还有一个叫Skyrim的文件夹,那还有一个Skyrim.ini,这货有什么作用我一直搞不懂,希望知道的告诉我!)
我们只根据官网的说明讨论以下两个ini文件,他们会被游戏使用(Used by the game):
在我的文档\My Games\Skyrim目录下面有两个:
Skyrim.ini和SkyrimPrefs.ini
这两个ini的文件其实起的效果差不多,根据CK官网的介绍,以SkyrimPrefs.ini的设置为优先, SkyrimPrefs.ini里的设置会覆盖Skyrim.ini的相同参数的设置。
猴子为什么在这方面不提出自己的见解,是因为以上几位基本上把ini对游戏的影响说到位了,猴子在这方面并不比他们强,甚至不如人家。
猴子是实在人,这是教学贴,需要的是严谨,就不提出一些子虚乌有见解来哗众取宠了。请谅解。请移步拜读几位的大作!
*****************************************************
2. 优化ini中的Papyrus脚本设置(很重要,这方面很多人在认识上有误区!)
其实这也是在ini中设置,为什么猴纸要单独分开来讲?
这是因为有关这项设置,有很多人被误导了。
包括N网的一些设置,N网也是个鱼龙混杂的地方,有高手,也有2B,外国的月亮并不比国内的圆!
这里都要求在我的文档\My games\Skyrim\Skyrim\Skyrim.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):
我把这些给翻译了。
PS:[感谢:L版大大(ID:loveltzzm)和我们组的Kevin兄台(ID:巨型小兽兽 )、PIC妹纸(ID:pichuchiu )的大力帮忙]
[翻译这东西真他喵的不是人干的活。英文好的不一定了解进程机制,猴纸是计算机专业可是英文又一般般,合众人之力搞了出来,费老大劲了!
]
原文对照:(做成表格,方便大家)
Individual Settings
个性化设置 这里再说一个误区,是刚才有个同学在回复中问的:
问所谓的内存清理MOD有没有作用?
他给了我一个网址,说是从这下的:
N网原址:
让我们用工具拆开这个MOD来看看代码:
这个回复在843楼,大家可以去看看!
这个什么All_you_need_Skyrim_performance_mod不要再用了,就是一个坑爹货。
清理内存,我给大家支两招:
1.在控制台使用PCB命令。
2.在我的文档\My Games\Skyrim\SkyrimPrefs.ini中的[BackgroundLoad]字段添加以下参数
[BackgroundLoad]
bSelectivePurgeUnusedOnFastTravel=1
改这个有点用
快速旅行时清理不用的内存。
这样设置,能在脚本编译和运行时稍微增大资源支持。保持游戏稳定。当然,本身就有错误的脚本不在此例,这个我会在后面讲到。
总结,合理的设置能优化游戏运行,减少CTD,反之,则会起到反效果。
对于一些盲目相信N网的人,我只能保留意见。
这让我想起了身边的一个朋友,两口子拼死拼活,把孩子送出去念一个根本不入流的大学,那个累啊~只能说,人的观念不一样,他们就是相信外国月亮特别圆~无语~这个社会的通病。
BY 树下肥猴 ![](static/image/smiley/coolmonkey/02.gif)
****************第三章 第1节完***************