【问题标题】:Memory issue in storing and retrieving Image from database从数据库存储和检索图像时的内存问题
【发布时间】:2016-10-17 01:59:39
【问题描述】:

我正在开发包含本地 SQLite 数据库的应用程序,我在其中存储和检索图像并显示到我的应用程序中。

现在我的问题是我在目录中存储了大量图像,并将其路径存储到数据库中。因此,当我从数据库中检索该路径并将图像加载到应用程序中时,每个图像的内存最多增加 10-20 Mb。

我也尝试将图像数据存储到数据库中,但同样的问题,每个图像的内存增加 10-20 Mb。

请问这个内存问题我该怎么办? 帮帮我吧

【问题讨论】:

  • 图像占用大量内存。您需要用您如何使用这些图像来更新您的问题。数据库的使用与您的问题无关。
  • 另外,图像有多大(磁盘空间和分辨率/位深度),以及如何加载它们(imageNamed:、contentsOfFile,来自 NSData)?您是在显示它们还是以其他方式强制它们被解码?你如何存储它们(UIImage、CGImage、NSData)?您预计它们需要多少内存?正如 rmaddy 所说,图像很大。在某些情况下,这是没有办法的。
  • 这个 SO 答案可能有助于了解您的图形内存使用情况:stackoverflow.com/a/17225377/763355

标签: ios sqlite memory


【解决方案1】:

在应用程序中使用图像时,可能需要比持久存储中资产的大小可能建议的更多的内存。资源经常被压缩(例如 JPG 或 PNG),但是当您使用图像时,它们是未压缩的,通常每个像素需要 4 个字节(红色、绿色、蓝色和 alpha 分别为一个字节)。因此,例如,当您使用图像时,iPhone 7+ 全屏 Retina 图像可能需要 14mb。因此,节省内存的技术是使用延迟加载,而不是在绝对需要它们之前创建 UIImage 对象。而且,正如 Jerry 所建议的那样,因为内存量取决于图像的大小而不是您使用图像的图像视图,如果您的图像的尺寸大于您使用它们的UIImageView 所需的尺寸(即图像视图的宽度和高度乘以设备的“比例”),您可能需要相应地调整图像大小。

【讨论】:

  • 我真的很喜欢你的回答,你的回答让我的问题解决了。谢谢
【解决方案2】:

您尝试显示的图像可能比它们需要在屏幕上显示的大得多。尝试将图像加载到内存中,创建具有所需大小的版本,然后使用它。当然,您可以实现一些缓存,这样您就不必不断调整相同图像的大小。但是当原始图像超出范围时,它的内存将被释放。如果您总是需要相同大小的图像,请在将它们存储到数据库之前尝试调整它们的大小,但是如果您想支持多种尺寸(可能适用于不同的设备),那么将图像存储为您需要的最大尺寸并调整大小其他人。

【讨论】:

  • 我真的很喜欢你的回答,你的回答让我的问题解决了。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 2011-02-20
  • 1970-01-01
  • 2015-03-16
  • 2016-05-27
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多