我有一个每10秒就需要一个对象。 我应该继续删除该对象还是继续使用同一个对象? 对象在哪里所谓的“空闲时间”?
因为它是一款手机游戏,所以内存是一个问题。 所以,只是想知道哪种方法会富有成效。
"creating and deleting objects" ?
或
"reusing a object" ?
感谢
答案 0 :(得分:4)
这很大程度上取决于对象的性质和程序其余部分的内存使用情况,但作为一条经验法则:
如果您需要整个程序中的对象,请将其保留在内存中。如果它很小,那就无所谓了。如果它很大,那么每十秒重新创建它将对处理器造成压力,分配也可能有助于memory fragmentation。
如果您按照我的建议选择保持对象处于活动状态,那么当它没有被使用时,它将存在于RAM中并占用一些空间(假设您的移动平台没有交换内存)。
答案 1 :(得分:1)
重用对象更便宜,特别是如果创建和删除操作很昂贵(绘图,磁盘访问,下载),但在缓存中有太多可重用的对象可能会填满你的记忆。
答案 2 :(得分:1)
你的探查者说什么?
这在很大程度上取决于对象,编译器和使用的类型
正在制作它。有一次我对它进行了基准测试(以及std::string
g++
库,每次循环重新初始化),
每次在循环中重建对象都更快。在
另一方面,大多数其他标准容器甚至可以保留其记忆
当清空时;在这种情况下,如果你定义容器外面的
循环,它(通常)会很快到达其最终大小
没有其他分配。
当然,您必须考虑恢复的难度
对象是一个原始状态。对象几乎是不可能的
例如,来源于std::ios_base
;你几乎总想用
一个新的std::ostringstream
,而不是尝试重用现有的{{1}}。
尽管有成本。
答案 3 :(得分:0)
当不再使用对象时,将调用析构函数以释放内存。但是,如果您随后创建了相同类型的新对象,则会调用构造函数以分配新内存。这肯定会降低性能(但实际上,它还取决于对象的大小),因此如果在程序执行期间不再需要对象,则应通过更改其内容来重用它。