- 注册时间
- 2013-11-20
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2013-11-20 04:31:11
|
显示全部楼层
CPU优化_解决游戏CPU占用太高之方法
我不敢保证能降低所有游戏的CPU占用率,我只测试了TX的某一款游戏,但是我觉得方法应该是可以通用的。
确实如大家所理解的,游戏占用CPU时间主要在绘制显示上,一般的逻辑判断其实对CPU占用是很低的,当然对于一些特殊游戏也可能不是这样,但那是特例。就如论坛上很多讨论如何去掉一些与显示有关的人物动作,或者减少一些背景的绘制,但是这些东西需要经验取分析,费时费力,甚至还有hook d3d等等,需要对D3D有一些了解才行。新手基本会忘而却步。
我们换个思路,我们想去掉显示,那需要看谁调用了显示函数,我们直接把调用的显示函数nop掉,是否会更简单?对于一般的程序处理显示的函数不会分布到各处,这样对于程序的维护是需要代价的,虽然我对游戏引擎不是很了解,但是我写过多年嵌入式程序,成熟的完善的程序,基本上执行显示是有一个或几个函数实现的。因此我们只要将这个函数nop掉,显示就会完全去掉,而CPU的占用率自然也降了下来。
本帖隐藏的内容需要回复才可以浏览
基本原理我已经说明了。下面再将如何定位这个游戏中执行的显示函数地址。
起始很简单的:
1、OD载入
2、对于D3D游戏,在D3D对应的DLL下内存访问断点,对于其他类型的游戏,比如OPENGL的,请在对应的DLL上下内存断点。
3、断下来后,ctrl+F9或者alt+F9,返回到游戏主程序空间。此时可以直接观看堆栈和查看周围代码。
4、怀疑其是游戏处理的显示函数,直接nop掉(注意堆栈平衡),看显示是否有变化。
给个提示,如果发现周围有 getmessage之类的函数调用,那可能就是游戏的主循环了,而你将你找到的函数nop掉应该会将显示去掉。
当然如果你成功的将显示去掉整个游戏是黑屏的,你如果要想看游戏画面,直接恢复就OK。 |
|