小编Mah*_* GB的帖子

抛开OO设计模式以在战略游戏中实现更好的表现?

假设我们希望由于某些原因和约束而有效地编程.我们应该放弃OOP吗?让我们用一个例子来说明

public class CPlayer{
   Vector3 m_position;
   Quaternion m_rotation;
   // other fields
}
public class CPlayerController{
   CPlayer[] players;
   public CPlayerController(int _count){
      players=new CPlayer[_count];
   }
   public void ComputeClosestPlayer(CPlayer _player){
      for(int i=0;i<players.Length;i++){
           // find the closest player to _player
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我们将类转换为结构,我们可以利用缓存内存中的播放器数组并获得更好的性能.当我们需要在ComputeClosestPlayer函数中迭代数组时,我们知道玩家结构是连续存储的,因此在读取数组的第一个元素时可以进入高速缓存.

public struct CPlayerController{
   CPlayer[] players;
   public CPlayerController(int _count){
      players=new CPlayer[_count];
   }
   public void ComputeClosestPlayer(CPlayer _player){
      for(int i=0;i<players.Length;i++){
           // find the closest player to _player
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我们想要获得更高的性能,我们可以将位置字段与类分开:

public Vector3[] m_positions;
Run Code Online (Sandbox Code Playgroud)

所以现在,当我们调用函数时,只有位置(每个位置12个字节)缓存在缓存中,而在以前的方法中,我们必须缓存占用更多​​内存的对象.

最后我不知道这是一种标准的方法,或者你避免将它从一个类中分离出来以获得更好的性能并分享你的方法以获得战略游戏中最多的表现,你有很多物品和士兵

c# performance caching

1
推荐指数
1
解决办法
393
查看次数

标签 统计

c# ×1

caching ×1

performance ×1