A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 21209|回复: 110

秋季更新的硬盘安装,所带来的loading速度增加和减少的权威解释和解决办法

[复制链接]

精华
0
帖子
13
威望
0 点
积分
13 点
种子
0 点
注册时间
2008-11-17
最后登录
2009-4-29
 楼主| 发表于 2008-11-17 11:56  ·  美国 | 显示全部楼层 |阅读模式
看到论坛里很多人都谈论ms秋季更新的硬盘读取问题,目前大家已经知道的是,硬盘读取对部分游戏有明显的提速,对部分游戏则不明显,对部分游戏甚至会变得比光盘读取更慢。

很多朋友对这个问题都感到疑惑,还做了很多毫无技术含量的猜测。我在这里给大家简单的讲讲这件事情。

先说说结果,ms会在下一轮更新中,提升硬盘安装游戏的读取速度,对不同的游戏,对比现在的秋季更新,大致还能有30%到50%的提高。

然后,完全不懂技术的小白看到这里就可以了,下面都是一些技术层面的细节。

1.大家都知道,硬盘的读取速度远远快过光盘。所以要加快游戏载入,用一部分硬盘空间做光盘的cache是个很自然的想法。xo在一开始就提供了这样的api接口。

2.360推出的时候,就有带硬盘和不带硬盘的两种版本,因此早期的很多游戏,为了图省事,完全没有使用硬盘cache,以便能够同时适应有硬盘和没硬盘的机器,此时的伪代码大致如下:

//需要读取数据时
      从光盘读数据();

  这是最简单的方式。但这样会导致游戏loading时间很长。xo早期的几个百万级游戏都有这样的问题。  

3.后来大家的开发水平提高了,知道能用硬盘做cache来提高速度,这时候的代码就变成了:

//需要读取数据时
    if(机器有硬盘 且 需读取的数据不在硬盘cache中)
     then
      {
        从光盘读数据();
        将该数据写入硬盘cache();
      }
    else if(机器有硬盘 且 需读取的数据已经在硬盘cache中)
      then
      {
         从硬盘读数据();
      }
    else if(机器没硬盘)
    then
      {
        从光盘读数据();
      }

由于大部分游戏中,一些基本数据,比如物件的贴图,基本模型,脚本等等,都是在游戏中大量重复使用的,在它们第一次被读取时,就会被放入硬盘cache,以后再需要使用时就都会从硬盘中读取,大大提高了读取速度。

4.写到这里,很多聪明的朋友应该已经懂得问题所在了吧?秋季更新的硬盘安装,对游戏本身是透明的,也就是说,游戏自己,并不知道自己是在光盘上还是在硬盘上。简单的说,秋季更新实质上是在内部更新了 从光盘读数据() 这个api接口:
   //老的api
      function 从光盘读数据()
      {
          直接从光盘读数据();
      }
  //新的api
    function 从光盘读数据()
    {
      if(游戏已经安装到硬盘)
       then 从硬盘读数据();
      else 直接从光盘读数据();
    }

  大家看到问题了吧?对很多老游戏而言,它们没有做优化,直接从光盘读数据,秋季更新硬盘安装以后,loading会得到明显的提升;但对于很多已经对硬盘cache做过优化的游戏而言,问题来了:在秋季更新硬盘安装以后,实质上,它会先从硬盘读数据(通过在第4点里面提到的 新的“从光盘读数据()”api),然后它会再把这个数据写入到硬盘cache里面(请参见第三点)!由于同时对硬盘的sata接口又读又写,会造成该接口的数据拥塞,大大影响了loading速度。在秋更以前,它是从光驱的sata接口读数据,再写入到硬盘的sata接口上,相对而言,影响还要小些。这就是为什么有些原本优化得很好的游戏,硬盘安装后,loading速度反而变慢了。

但这个问题是可以解决的吗?答案是当然可以。ms会继续优化代码的api接口,在下一轮更新里面,如果检测到游戏已经安装到硬盘,程序会把所有写入硬盘cache的api接口置为空(即什么也不做),同时把所有从硬盘cache读取数据的api直接重定向到从光盘读数据(正如前面所指出的,从光盘读数据的api接口会再判断一次硬盘安装,然后重定向到从硬盘直接读数据),问题解决。 .
hdk

精华
0
帖子
1081
威望
0 点
积分
1438 点
种子
5 点
注册时间
2004-7-21
最后登录
2018-2-20
发表于 2008-11-17 12:08  ·  浙江 | 显示全部楼层
lz说得有很道理
期待再次更新。哈哈

精华
0
帖子
474
威望
0 点
积分
479 点
种子
0 点
注册时间
2008-10-18
最后登录
2019-8-12
发表于 2008-11-17 12:08  ·  广东 | 显示全部楼层
这个是个有技术含量的贴.....顶

精华
0
帖子
8637
威望
0 点
积分
9138 点
种子
35 点
注册时间
2004-12-21
最后登录
2024-7-26
发表于 2008-11-17 12:14  ·  广东 | 显示全部楼层
下面是引用blaze84于2008-11-17 12:08发表的:
这个是个有技术含量的贴.....顶

+1

征服者

永远的软饭#

精华
0
帖子
5504
威望
0 点
积分
6245 点
种子
0 点
注册时间
2007-12-1
最后登录
2012-9-6
发表于 2008-11-17 12:15  ·  广东 | 显示全部楼层
楼主的if语句用得不错、

精华
0
帖子
1708
威望
0 点
积分
1776 点
种子
37 点
注册时间
2006-1-26
最后登录
2024-12-20
发表于 2008-11-17 12:18  ·  贵州 | 显示全部楼层
处女贴,顶你一顶。不过别动不动把技术挂嘴上,而且几个入门级的编程语句并不太见得很技术$%^$#%@#$%#$
该用户已被禁言

精华
0
帖子
695
威望
0 点
积分
716 点
种子
0 点
注册时间
2005-3-19
最后登录
2020-1-9
发表于 2008-11-17 12:20  ·  河北 | 显示全部楼层
顶!!!

看这语法~~楼主搞VC的吧?

分析的不错~XBOX360的架构根本和PC一样~~

精华
0
帖子
267
威望
0 点
积分
293 点
种子
0 点
注册时间
2008-10-30
最后登录
2012-5-30
发表于 2008-11-17 12:20  ·  上海 | 显示全部楼层
貌似游戏玩家里,IT不少啊!!???

精华
0
帖子
88
威望
0 点
积分
92 点
种子
92 点
注册时间
2004-8-28
最后登录
2022-6-5
发表于 2008-11-17 12:22  ·  上海 | 显示全部楼层
写的很浅显易懂!

精华
0
帖子
215
威望
0 点
积分
0 点
种子
0 点
注册时间
2007-4-4
最后登录
2018-10-29
发表于 2008-11-17 12:24  ·  北京 | 显示全部楼层
呵呵,这么简单的优化,难道MS还需要分两步来做?
随便一个程序员都能想明白的事情,MS会想不明白?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2025-3-1 22:02 , Processed in 0.199799 second(s), 19 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部