为什么我的Ruby程序在添加10,000个对象时会减慢x100的速度?

时间:2014-09-02 18:47:42

标签: ruby performance memory-management

没有i / o,没有数据库,没有put语句。我有一个我实例化的中心对象,它的初始化方法中有几个Set.new创建。 (我将Set.new更改为Array.new无效)。

我想进行内存负载测试,但发现单次调用我的系统的性能大致线性地从1 x 10-4增加到160 x 10-4,因为我调用了20,000次(添加了一个新对象)每次通话)。所以我从来没有进入内存测试部分......

我将时间增加缩小到Muffin.new语句,初始化中有两个Set.new创建。

奇怪的是,内存分配或对象创建应该花费与创建的对象数量成比例的时间,但这是我认为我所看到的。

我错过了什么吗?是这样的吗?还有其他我应该考虑或考虑的事情。?

2 个答案:

答案 0 :(得分:0)

听起来像垃圾收集器正在工作......尝试在分配之前使用GC.disable,然后在GC.enable之后查看它是否能解决问题。

我不是Ruby专家,但Ruby的垃圾收集实现可能不是这个语言的最佳选择。请阅读this了解详情。

答案 1 :(得分:0)

道歉:找到了我正在做的地方"收集"超过集合中的所有项目;所以当然它在物体数量上是线性的。把它拿出来,时间是不变的,应该如此。

毋庸置疑,我撤回了这个问题。