SDWebImage 的内存优化问题

2016-12-13 00:21:57 +08:00
 niselover
目前在使用 SDWebImage 库加载大量图片的时候遇到内存问题:
一行四个图片显示的话,内存一般在 30-40m 左右;
一行三个图片显示的话,划一划内存就飙到 100m+;

请教一下大家,想要一行显示三个图片的情况下,应该怎么做优化内存?
4372 次点击
所在节点    iDev
13 条回复
kitalphaj
2016-12-13 07:50:11 +08:00
问题有些模糊,能不能说具体点
black
2016-12-13 10:37:05 +08:00
加载缩略图了没?
niselover
2016-12-13 12:31:20 +08:00
@kitalphaj 就是像系统相册样式加载网络图片 内存飙升怎么回事哇?
niselover
2016-12-13 12:31:51 +08:00
@black 加载的是缩略图 还是内存飙升(摊手
vincentxue
2016-12-13 14:34:13 +08:00
你这种情况可能更适合 FastImageCache 。
vincentxue
2016-12-13 14:47:26 +08:00
FastImageCache 这种极限优化也是利弊兼存的,所以还是我建议还是先检查代码,更有可能是代码的问题而不是框架本身的问题。

就按你一屏显示 30 个图片,启动内存就按 30M 算,那么滑动一下图片就占了 70M ,合一个图片 2.3M 。你如果缩略图每个这么大,那看来还得继续缩。

如果第一次加载,还没滑动之前就 100M+,那么你图片应该是没有压缩的。

如果没滑动之前内存没什么问题,滑动就越来越大或者降低速度较慢,那肯定是你代码的问题了。以我个人的经验来看,建议你检查你加载图片的大小和 Cell 重用的情况。
niselover
2016-12-13 15:57:23 +08:00
@vincentxue 嗯嗯 感谢回复 我再检查下代码
niselover
2016-12-13 17:59:07 +08:00
@vincentxue 能加你 Q 请教一下吗
vincentxue
2016-12-14 23:35:34 +08:00
不好意思。
ZernonHuang
2016-12-16 00:51:04 +08:00
我有一个思路,通过 RunLoop 来优化一下你的问题。
如楼上所说的,你没滑动的时候,内存没有问题,滑动之后, cell 就开始加载图片。
所以你可以判断 RunLoop 的 UITrackingRunLoopMode ,来确定是否在滑动当中。
滑动的时候其实可以不加载图片,停下来再加载。

小思路,希望可以帮助你 : )
DingSoung
2016-12-20 19:09:52 +08:00
不要 load 全尺寸, ImageView 多大就 load 多大,不然占内存还有性能问题。
如果是 7 牛,记得请求 url 是可以配置尺寸参数的,
jswxdj
2017-03-03 13:42:53 +08:00
是不是 cg-raster-data 一直在飙升
jswxdj
2017-03-03 13:45:34 +08:00
@jswxdj 你可以把它默认的 shouldDecompressImages 关闭,禁止它帮你将图片解压到内存中, https://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327188

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX