英伟达9系列的玩家不必担心,出现性能问题的代码量并不大

图片 3

英伟达9系列的玩家不必担心,出现性能问题的代码量并不大

| 0 comments

图片 1

PHP的性能一直在提高。然而,若是用的不恰当,或是一个不留神,还是可能会踩到PHP内部实现方面的坑的。我在前几天的一个性能问题上就碰到了。

如果玩家在进行《巫师3》的过程中遇到了各种性能或者崩溃的问题,建议如下:

事情是这样子的,一位同事反馈我们的一个接口每次返回需要5秒之久,我们一起review了代码,“惊喜”的发现居然在循环(大约900次)中调用了一个读缓存的操作,而这个缓存的key并没有改变,因此我们把这段代码移到了循环外面,再测,接口返回时间降到了2秒,呜呼!虽然提升了1倍,但明显不是我们能接受的结果!
出现性能问题的代码量并不大,我们排除了IO问题以后,写了一段测试代码,果然问题很快重现。

首先查看配置是否达标,如果配置不够的话,就别开ultra特效了。适当降低一些特效保证流畅运行。

复制代码 代码如下:

英伟达9系列的玩家不必担心,9系列显卡对于本作的支持非常到位,不过6系和7系显卡则会出现一些问题。

<?php
$y=”1800″;
$x = array();
for($j=0;$j<2000;$j++){
$x[]= “{$j}”;
}

现在就为大家讲解一下如何在保持画面最优的情况下,保证游戏的流畅度:

for($i=0;$i<3000;$i++){
if(in_array($y,$x)){
continue;
}
}
?>

在“显示”菜单,除去“植被可视距离”之外,将所有画面选项调到“高”。

shell$ time /usr/local/php/bin/php test.php

一定要确保Nvidia海飞丝特效处于关闭状态,并确保游戏处于全屏模式运行。

real 0m1.132s
user 0m1.118s
sys 0m0.015s

同时将最大帧率调整为30帧,这样看起来就会有着非常流畅的游戏体验了(除非你的显卡为970或以上)。

对的,我们用的就是字符串型的数字,从缓存拿出来就是这样子的啦!所以这里是特意转成字符串的(如果直接是数字,并不会出现这个问题
,各位可以自行验证)。可以看出时间耗掉了1秒,才3000次循环,后面的sys用时也注定我们用strace不会拿到什么有效信息。

在“后期处理”效果中,除去“动态模糊”,“锐化”,“HBAO+”与“光照”之外,关闭其他特效。

shell$ strace -ttt -o xxx /usr/local/php/bin/php test.php
shell$ less xxx

如果玩家觉得30帧不够流畅,可以进入My Documents/The Witcher
3/user.settings文件,打开并搜索LimitFPS,设置为40即可。

图片 2

图片 3
巫师3:狂猎(The Witcher 3:Wild Hunt) 9.4 已有276人评分 您还未评分!

我们只看到这两次系统调用之间的延时非常大,却并不知道干了什么?一筹莫展了,幸好,Linux下的调试利器除了strace还有ltrace(当然还有dtrace,ptrace,不在本文讨论范围了,略去)。

  • 类型:角色扮演
  • 发行:CD Projekt Red
  • 发售:2015-05-19
  • 开发:CD Projekt Red
  • 语言:繁中 | 英文
  • 平台:PC PS4 XBOXONE
  • 标签:魔幻,艺术,开放世界

引用:strace用来 跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来
跟踪进程调用库函数的情况(via IBM
developerworks)。

为了排除干扰因素,我们将$x直接赋值为array(“0″,”1″,”2″,……)的形式,避免过多的malloc调用影响结果。执行

  • 专区
  • 新闻
  • 攻略
  • 下载
  • 图片

shell$ ltrace -c /usr/local/php/bin/php test.php

如图2

图片 4

我们看到库函数__strtol_internal的调用非常之频繁,达到了94%,太夸张了,然后我又查了一下这个库函数__strtol_internal是干嘛的,原来是strtol的别名,简单的说就是把字符串转换成长整形,可以猜测PHP引擎已经检测到这是一个字符串型的数字,所以期望将他们转换成长整型来比较,这个转换过程中消耗了太多时间,我们再次执行:

复制代码 代码如下:

shell$ ltrace -e “__strtol_internal” /usr/local/php/bin/php
test.php

可以轻松抓到大量下图这样的调用,到此,问题找到了,in_array这种松比较,会将两个字符型数字串先转换为长整型再进行比较,却不知性能就耗在这上面了。

相关文章

发表评论

Required fields are marked *.


网站地图xml地图