iPad接收到内存警告,但内存使用率很低

8
我有一个带有HTML的UIWebKit,在这个HTML中有几张图片和文本,但仅显示它就会给我带来内存警告。所以我进行了一些测试: 同样的HTML使用不同的图片,全尺寸和相同的图片缩小50%,对于缩小50%的图像,我去预览并将所有图像缩小50%。
令人惊讶的是50%的测试,即使有16张图片,内存峰值也只有4.90MB。这真的很惊人。 请注意,这些值并不总是相同的,它们会发生变化,但测试之间没有太大的差异。
在50%的问题中,在8和16张图像中,虽然内存较低,但有时会出现内存警告,但与全尺寸图像相比,性能提高是明显的。
静止 = 滚动整篇文章后的内存
1张图片= [静止5MB] [旋转5.6MB]
2张图片= [静止6.99MB] [旋转7.7MB]
3张图片= [静止9.04MB] [旋转10.9MB]
4张图片= [静止10.89MB] [旋转13.20MB]
8张图片= [静止23.14MB] [旋转25.20MB](有时会崩溃)
16张图片= [静止27.14MB和应用程序崩溃]
50%
1张图片= [静止3.2MB] [旋转3.67MB]
2张图片= [静止3.2MB] [旋转3.70MB]
3张图片= [静止3.3MB] [旋转3.79MB]
4张图片= [静止3.3MB] [旋转3.80MB]
8张图片= [静止4.29MB] [旋转4,63MB](有时会崩溃)
16张图片= [静止4.79MB] [旋转4,90MB](有时会崩溃)
我的问题是:为什么有16个小图像的应用程序有时会崩溃?内存明显更低。 内存使用的极限是多少?对于大型图像,最大值似乎不同。13.2MB适用于大型图像,而3.8适用于小型图像。任何更高的值有时都会导致崩溃。这没有意义。
谢谢
1个回答

2

如果您发布崩溃日志,将有助于解决问题,因为崩溃很可能与内存消耗无关,而与您如何处理内存有关。是的,图像大小可能加剧了问题,因为每个图像使用的实际内存量根据以下公式确定:

w * h * 4

假设图片是32位彩色图像,其中w是像素宽度,h是像素高度。因此,1024x1024 32位彩色图像将使用大约4.2 MB的内存,而512x512 32位彩色图像将使用1兆字节。

您的崩溃报告将很有价值。在Instruments下运行对象分配和泄漏工具可能会提供巨大的见解(运行时显示侧面板,它将显示您发现的任何泄漏的调用堆栈)。还要注意,如果您发现指向CIOImage或类似内容的泄漏,那么泄漏最终发生的地方可能在那里,但泄漏发生的地方几乎肯定在您的代码中。

此外,在运行Instruments时,请记住将其连接到正在设备上运行的应用程序;在这种情况下,不要轻信模拟器所说的任何内容。


你计算图像的未压缩尺寸是正确的(我会使用公式(w*h)B,其中“B”表示每个像素的字节数而不是位数)。这可能就是他的问题所在。 - Michael
我在计算字节而不是位。32位中有4个字节。 - jer
抱歉,我意识到你正在使用字节。我只是想为OP更清楚地解释,因为当大多数人谈论图像时,他们会提到“每像素位数”。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接