一些类有一个 size 方法,它返回对象在内存上的大小。例如:
1.size 返回 4,这意味着它需要 4 个字节来存储 Fixnum 对象( 1 的类)。 Bignum 对象也是如此:4294967296.size 返回 8。
ActiveRecord::Base 似乎没有等效的方法。如果想测量我的 ActiveRecord 占用多少内存,我该怎么办?

最佳答案

size 方法返回数字的机器表示中的字节数。它不一定(实际上也不会)为您提供实际的内存使用情况。虽然 Fixnum 确实需要 4 字节的内存(在 MRI 中,其他 Ruby 实现有所不同),但 Bignum 需要更多内存,因为它是一个实际的 Ruby 对象。

类似地,实现 size 方法的其他类,如 StringArrayHash 不会返回内存使用情况,而是它们包含的元素数量(分别为字符、数组元素、键)。

通常,您无法真正确定对象在内存中占用多少内存(好吧,您可以,但它不会为您提供所需的信息)。 ActiveRecord 对象引用了大量其他对象,如哈希、字符串、符号等。您可能也需要对它们进行计数,甚至可能是递归的。然后您需要以某种方式处理对相同对象的引用,并在某处定义对象树的边界,直到您最终重新实现大部分垃圾收集器。

所以最后,事实证明,您实际上无法确定单个 ActiveRecord 对象的内存使用情况,而且您可能不应该这样做。有关更多详细信息,另请参阅我在 another question 上的类似答案。

关于ruby-on-rails - 如何在内存上测量 ActiveRecord 的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22385345/

10-14 21:34
查看更多