【问题标题】:Does using Active Record pattern cause significant memory bloat?使用 Active Record 模式会导致显着的内存膨胀吗?
【发布时间】:2013-03-04 02:27:38
【问题描述】:

我正在研究活动记录和数据映射器设计模式之间的区别。想到的一个简单问题是,随着每个活动记录实例中持久性方法的重复,这不会导致大量不必要的内存使用吗?还是可以忽略不计?

【问题讨论】:

  • 每个类实例的重复,或者你的意思是Person.findPet.findBuilding.find
  • @cfeduke 每个类实例。

标签: database design-patterns activerecord memory-management language-agnostic


【解决方案1】:

面向对象的编程语言方法通常存在于类级别,而不是对象级别。这意味着一个对象是一个类的实例,并且在调用(或发送,取决于语言)object.foo 时,它实际上是指回该类并在对象的上下文中调用该类的方法。 (这可以通过多种不同的方式来实现,我没有资格深入写。)

想象一下ToString/toString/to_s 在流行语言中的开销,如果Object 或其继承者的每个实例都有该方法的副本!

所以要回答您的问题,不,对于构成您的 Active Record 类的 上的方法,没有不必要的内存使用。

【讨论】:

  • 这解释了很多。我不知道这是对象/类通常在内部工作的方式。谢谢!
  • 请注意,在某些语言中,例如 Ruby(不太确定是否还有其他语言)Class 继承自 Object,这让事情有点奇怪,但调度表的一般概念仍然是相同。这确实意味着给定类的某些实例可能具有不同的行为,尽管这不是常态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2014-09-20
  • 1970-01-01
相关资源
最近更新 更多