xfangfang / wiliwili

第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上
https://xfangfang.github.io/wiliwili
GNU General Public License v3.0
2.98k stars 145 forks source link

内存优化 #331

Closed lanytcc closed 2 months ago

lanytcc commented 2 months ago

我这昨天看直播发现一个现象:

  1. 打开直播间大约半小时左右,软件会释放30 ~ 50mb的内存

    200+ -> 160+ image

  2. 打开直播间(有弹幕)1~2小时,软件会再次释放50 ~ 80mb的内存

    image

打开一个有直播弹幕的直播间稳定触发,我不知道这是否是预期行为或者是可控制的 如果是可控的,是否能当做一个优化的方向,因为我发现退出界面软件依旧正常运行,且浏览界面内存占用并没有回升多少。 我猜测是跟borealis有关(?),但我不知道为什么触发条件是有弹幕,我昨晚开了一个24小时直播的直播间,挂了一晚上也没复现。

xfangfang commented 2 months ago

很奇怪的行为哈,我感觉这个可能不是可以优化的,我现在能想到的涉及到内存(显存)释放的应该只有在调整窗口尺寸时应用会将已经生成的svg图片按新的尺寸重新生成,如果调小窗口大小就会稍微释放一些。

我猜测没准是操作系统做的什么优化,可以在断网的情况下打开 wiliwili(或者试着运行一下 borealis的demo),这时因为没加载任何图片,应用占用内存应该是最小的,如果此时占用的内存比上面两个图中任意一个还大 那就可能是操作系统的行为了。

xfangfang commented 2 months ago

另外一个想法,如果你在设置中将解码缓存开了一个很大的值,同时观看过视频(缓存空间都被使用了),这时候再去看直播,因为直播没什么需要缓存的,或许缓存空间会被mpv释放(这是我的猜测,我不知道mpv会不会有这种行为),如果猜测成立,那么确实会出现占用内存下降的可能。

lanytcc commented 2 months ago

很奇怪的行为哈,我感觉这个可能不是可以优化的,我现在能想到的涉及到内存(显存)释放的应该只有在调整窗口尺寸时应用会将已经生成的svg图片按新的尺寸重新生成,如果调小窗口大小就会稍微释放一些。

我猜测没准是操作系统做的什么优化,可以在断网的情况下打开 wiliwili(或者试着运行一下 borealis的demo),这时因为没加载任何图片,应用占用内存应该是最小的,如果此时占用的内存比上面两个图中任意一个还大 那就可能是操作系统的行为了。

断网进入静止几秒后内存跟最后一阶段差不多大概在90~100左右,应该不是操作系统做的优化

lanytcc commented 2 months ago

另外一个想法,如果你在设置中将解码缓存开了一个很大的值,同时观看过视频(缓存空间都被使用了),这时候再去看直播,因为直播没什么需要缓存的,或许缓存空间会被mpv释放(这是我的猜测,我不知道mpv会不会有这种行为),如果猜测成立,那么确实会出现占用内存下降的可能。

没有观看过视频,且解码缓存为0mb,然后一打开直播,内存就会飙升至200+,然后再走我issue中的内存逐步降低的流程。 那我觉得有可能就跟mpv的策略有关

xfangfang commented 2 months ago

看了直播之后的内存 = 断网进入时的内存 + 各种图片封面的内存 + mpv占用的内存

如果 看了直播之后的内存 = 断网进入时的内存 那么后两者就约等于 0 了,如果没怎么浏览直接点开的直播,那图片占用应该很少,但是mpv需要的内存还是有一些的,点开视频时会有一个明显的增加,mpv应该会在初始化时申请一大块内存,自己内部来控制内存的使用,我感觉他应该不会主动释放自己不需要的内存,但是也说不准哈。

可以去查查看mpv的文档,看看有没有什么可以优化的选项,先关闭这个issue了,如果找到什么线索欢迎随时交流。(其实正常浏览的话图片占用的空间应该是大头,这几十兆貌似影响也不是很大哈)