by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Aug 13 21:58
    mralj edited #3071
  • Aug 13 21:58
    mralj edited #3071
  • Aug 13 21:58
    mralj edited #3071
  • Aug 13 21:58
    mralj opened #3071
  • Aug 13 10:36
    dreampiggy labeled #3070
  • Aug 13 10:36
    dreampiggy milestoned #3070
  • Aug 13 10:30
    dreampiggy edited #3070
  • Aug 13 10:27
    dreampiggy opened #3070
  • Aug 13 10:00
    dreampiggy milestoned #3062
  • Aug 13 05:24
    Insofan edited #3069
  • Aug 13 05:24
    Insofan synchronize #3069
  • Aug 13 02:43
    dreampiggy milestoned #3033
  • Aug 13 02:43
    dreampiggy demilestoned #3033
  • Aug 13 02:40
    dreampiggy closed #3066
  • Aug 13 02:40
    dreampiggy closed #3050
  • Aug 12 10:37
    Insofan edited #3069
  • Aug 12 10:37
    Insofan opened #3069
  • Aug 12 02:39
    dreampiggy synchronize #3066
  • Aug 11 21:57
    CapnSpellcheck closed #3064
  • Aug 11 13:03
    dreampiggy labeled #3068
DreamPiggy
@dreampiggy
解码渲染后立即销毁,内存释放。不过动图频率高了或者解码慢,就会lag
Lee0820
@Lee0820
昨天那个demo,一直涨的问题您这边有debug吗 ~
DreamPiggy
@dreampiggy
我今天或明天抽空看一下,有Full Time Job有时会忙
Lee0820
@Lee0820
好的,辛苦了,感谢
DreamPiggy
@dreampiggy
这样吧,这个问题有一个优化点,就是目前各个SDAnimatedImageView都是独立的,Player也是独立的,各自有一个frame cache limit,但是总数可能会很高,导致频繁触发DidReceiveMemoryWarning。虽然理论上不会Crash(因为一旦触发立即销毁了,这个销毁是block main queue同步进行的而非异步)。但是按照你的意思想更精确控制消耗
可能需要对全局的Player的内存占用做一个管理,或者更激进的,对所有通过SDImageCodersManager的触发解码/编码的调用,做内存管理
一直以来忘记这个事情了
Lee0820
@Lee0820
具体现在怎么操作,通过设置 SDAnimatedImageView 的 maxBufferSize来处理吗?
Lee0820
@Lee0820
目前有当 SDAnimatedImageView 销毁的时候能情况它图片占用的内存吗?
DreamPiggy
@dreampiggy
frame cache是SDAnimatedImageView的一个属性,字典,当然销毁……
除非你在Decoder级别做了缓存,有一个叫做preloadAllFrames的options,看那个说明
额,5.7以后是SDAnimatedImagePlayer,其实代码就是移动过去的
Lee0820
@Lee0820
目前用SDAnimatedImageView加载gif,设置了maxBufferSize还是内存暴涨,我看SDAnimatedImageView delloc方法执行了,但是内存没释放 ~
DreamPiggy
@dreampiggy
那就说明这个内存不是帧缓存占据的内存
帧缓存是绑定到ImageView上的,不是SDAnimatedImage上,也不会存入SDImageCache,对吧
xiaoxiaoyingqian
@xiaoxiaoyingqian
9A95F0C8-E549-4561-9D45-F545DE013B3E.png
发现5.x版本一个崩溃,出现概率较高
DreamPiggy
@dreampiggy
按照模版发一下场景,iOS版本,Xcode版本,SDWebImage版本,机型,复现概率
看堆栈像是系统ImageIO库线程不安全?
xiaoxiaoyingqian
@xiaoxiaoyingqian

Issue Info

Info Value
Platform Name ios
Platform Version 13.1.3
SDWebImage Version e.g. 5.0.0 / 4.4.0
Integration Method cocoapods
Xcode Version Xcode 11.3.1
Repro rate unknown
Repro with our demo prj
Demo project link
我们最近准备从4.x切换到5.x,然后我这边直接真机联调截断就发现了3次左右这种情况,我怀疑是ImageIO库非线程安全的问题,但是好像查了下,这个api有说是线程安全的
DreamPiggy
@dreampiggy
具体SDWebImage的版本号
DreamPiggy
@dreampiggy
不清楚是不是有一些内部机制修改。这里的CGImageSourceCreateImageAtIndex,先手动会本地构造的NSMutableDictionary进行一次copy操作吧(之前测试是无所谓的)。
image.png
xiaoxiaoyingqian
@xiaoxiaoyingqian
5.8.3
DreamPiggy
@dreampiggy
你建立一个Issue吧,或者我拷贝过来
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian Please have a try with v5.8.4 version.