【问题标题】:Does it "save memory" to put methods in one Big class? (Many objects)将方法放在一个大类中是否“节省内存”? (许多对象)
【发布时间】:2012-04-14 11:40:12
【问题描述】:

我正在为移动平台开发一款游戏,其中内存始终是一个问题。

我正在使用一个基本的抽象类敌人。所有其他敌人都将是此类的变体。

我的初衷是将更新敌人的方法存储在基类中,然后将具体的行为存储在每个子敌人类中。

我的问题是:每个负载(或关卡)可能有数百个敌人,我是否会节省内存将我的所有行为写入每个敌人所指的一个大类中?换句话说,拥有数百个敌人,每个敌人都有大量行为代码,是否比将所有内容存储在单个引用类中需要更多的内存?

初步构想:

enemy.Update()

节省内存的想法:

//Static class is named EnemyBehavior
EnemyBehavior.UpdateEnemy(enemy)

【问题讨论】:

  • 代码未存储在类中。类只存储数据。
  • 我想你的意思是 instance,@David。
  • 类在它们的实例中存储数据,是的。但它们根本不在任何地方存储代码。
  • 我可以看到类如何存储数据,@David,但在某种意义上对 OP 没有用处。

标签: c# xna


【解决方案1】:

虽然您的类的每个实例都有自己的私有的、消耗内存的变量副本,但它确实没有有其方法定义的单独副本。方法消耗每个的内存,而不是每个实例。这才有意义,因为类实例不可能更改方法的定义。所以,抱歉,但你的想法不会节省任何记忆。

【讨论】:

  • 这就是我希望听到的。谢谢!
【解决方案2】:

内存的工作原理并不完全如此。堆需要存储数据和引用,而不是实际代码。因此,您不会通过决定在静态类中将“通用代码”存储在何处来保存任何内容 - 将代码与您的对象实例一起使用并不意味着它被物理复制到每个实例中。

您的建议违背了面向对象编程的全部原因,即行为封装和关注点分离。

tl;dr - 将代码与类本身保持一致。

【讨论】:

  • 好吧,类型存储在“堆上”,但每个类型只存储一次,在很大程度上可以忽略;-)
  • 值得注意的是,并非所有语言都以这种方式工作。一些更动态的语言,例如一些脚本语言,不在类定义中定义类方法,而是本质上将所有方法都视为委托。
猜你喜欢
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
相关资源
最近更新 更多