10

我最近一直在开发一个应用程序,它非常频繁地处理大量数据(大约每分钟 15 次)。为此,我分配了一大块内存,然后为每批数据释放它。

这是我的 Instruments 内存分配屏幕: 记忆

内存使用量从大约 3MB 快速波动到大约 30MB。我只是想知道,这对于 iPhone 本身来说是否“健康”。

这么快分配和释放这么多内存有风险吗?这是不可持续的,还是只是不好的做法?

谢谢!

4

3 回答 3

7

这既不是冒险也不一定是坏做法。分配和释放内存需要时间,因此非常频繁地执行此操作与执行一次并重新使用分配的内存是内存使用效率(每时每刻使用最少的内存量)和性能之间的权衡。

如果您的应用程序的性能目前没有受到影响,那么您可能已经为您的应用程序做出了关于此权衡的正确选择。

一般来说,使用 30 MB 的内存对于旧设备(iPhone 3G 和更早的设备)来说是相当大的。您无法确定您的应用程序有那么多可用内存,因此请准备好收到内存警告。如果您的应用程序在收到内存警告时无法减少其内存使用量,则操作系统可能会终止它。

于 2011-01-30T16:24:51.313 回答
4

在这些情况下,我主要担心的是碎片化。如果这些块的大小都相同,那么您应该没问题(并且查看您的图表,峰值似乎是完全水平的,所以我认为就是这种情况)。

您将支付分配成本,但正如 Ole 所说,如果您的应用程序已经表现得足够好,那么尝试优化它就没有多大意义了。

于 2011-01-30T19:11:18.533 回答
-1

这取决于,如果用户拥有 iPhone 4 或 iPhone 3GS,它应该是可行的,但在 iPhone 3G 上它会很快导致内存警告。iPhone 4 有 256mb 的应用程序内存(总共 512mb) iPhone 3GS 有 128mb 的应用程序,总共 256 个 iphone 3g 的应用程序只有 128mb 和 64mb .. 当没有应用程序运行时,通常有大约 40mb 的空闲空间.

正如苹果所说,你应该只分配你真正需要的内存,并尽量不要过多地使用自动释放,因为自动释放给了我们一个正在分配的对象,而我们真的不再需要它了

如果性能还不错,我会尝试使用更少的内存并在您真正需要时分配更多内存。

于 2011-01-30T14:59:45.163 回答