V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
niselover
V2EX  ›  iDev

SDWebImage 的内存优化问题

  •  
  •   niselover · 2016-12-13 00:21:57 +08:00 · 4537 次点击
    这是一个创建于 2906 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前在使用 SDWebImage 库加载大量图片的时候遇到内存问题:
    一行四个图片显示的话,内存一般在 30-40m 左右;
    一行三个图片显示的话,划一划内存就飙到 100m+;

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

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

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

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

    小思路,希望可以帮助你 : )
    DingSoung
        11
    DingSoung  
       2016-12-20 19:09:52 +08:00
    不要 load 全尺寸, ImageView 多大就 load 多大,不然占内存还有性能问题。
    如果是 7 牛,记得请求 url 是可以配置尺寸参数的,
    jswxdj
        12
    jswxdj  
       2017-03-03 13:42:53 +08:00
    是不是 cg-raster-data 一直在飙升
    jswxdj
        13
    jswxdj  
       2017-03-03 13:45:34 +08:00
    @jswxdj 你可以把它默认的 shouldDecompressImages 关闭,禁止它帮你将图片解压到内存中, https://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:05 · PVG 21:05 · LAX 05:05 · JFK 08:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.