原标题:关于LZMA和LZ4压缩的疑惑解析

这是第112篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA QQ群:465082844(仅限技术交流)

AssetBundle

Q:昨天看到问答社区上UWA_Xin对LZMA和LZ4压缩的解答,在此有些疑问。

问题1:我在网上看到这篇文章(https://www.cnblogs.com/AaronBlogs/p/6837828.html)提到,AssetBundle在加载的时候需要扩展出来一块内存来解压,我觉得解压这个说法是有问题的,因为如果都被解压出来了,就不需要LoadAsset了。资源都已经在内存中了,而我们测试的时候,用LZ4要比LZMA内存小了快200MB,所以我觉得LZMA是在加载AssetBundle的时候会把资源都解压出来的,并不是只是多了一个LZ4的AssetBundle大小。

我看了UWA关于《移动游戏加载性能和内存管理全解》的视频讲解,上面说用LZMA压缩的时候LoadFromCache在第一次读取时会很耗时,是由于Cache会把AssetBundle包重新压缩成LZ4使得第二次读取的时候速度加快,所以上面截图说的LZMA会把AssetBundle再压缩成LZ4其实只是针对的LoadFromCache这个接口而言的,而不是针对的LoadFromFile,猜想LoadFromFile是直接从硬盘读取的,不存在Cache的操作,所以上图是不是说得有误?

问题2:LZ4压缩AssetBundle包是按照Chunk来读取的,那么在解压AssetBundle包的时候一般是在读取AssetBundle的头文件信息,那么解压AssetBundle包的时候LZ4的Chunk优势是没有优势的吗?加载AssetBundle的时候LZMA和LZ4的速度应该一样的吗?(如果LZMA是完全解压整个包体就另当别论了)。

UWA:问题1解答:我觉得解压这个说法是有问题的,因为如果都被解压出来了,就不需要Loadasset了,资源都已经在内存中了。

解压和加载是两回事的。题主给的文章里说的解压是针对WWW接口的,WWW加载LZMA,是需要解压进内存的,但这个只能算是二进制流,相当于是未压缩的AssetBundle,后续的LoadAsset依然是要做的…但第二次调用的LoadFromCache就不用了,因为磁盘的Cache里已经是“未压缩的AssetBundle”了。

上面截图说的LZMA会把AssetBundle再压缩成LZ4,这不仅仅是针对LoadFromCache的,LoadFromFile也是一样,只是LoadFromFile是不Cache到磁盘的,完全在内存中进行,所以这个接口加载LZMA的AssetBundle一样会变很慢,同时造成内存的明显上涨。

问题2解答:根据问题1的解释,LZ4相比LZMA在加载的时候还是有很大优势的。但最后还是留下了一个疑问,而我们测试的时候用LZ4,要比LZMA内存小了快200MB,所以我觉得LZMA是在加载AB的时候会把资源都解压出来的,并不是只是多了一个LZ4的大小。经过这边的一些测试,这个内存的差异确实更加接近未压缩的的大小,而不是LZ4的大小。

所以题主可不可以再多做一步,就是把用到的打成未压缩的,看看是不是确实接近200MB呢?

该回答由UWA提供,欢迎大家转至社区进行进一步交流

粒子系统

Q:粒子系统是否能够支持GPU Instancing?做了些例子都没能看到GPU Instancing生效。

UWA:Unity 2018已经支持Particle System的GPU Instancing了,不过必须是Mesh模式的,具体可以看这个文档:

https://docs.unity3d.com/Manual/PartSysInstancing.html

https://answer.uwa4d.com/question/5afe9bb56b104d27ac3aadaa

加载

Q:如果我代码中声明了个Texture然后加载了图片,是不是无论我的这个Component销毁或者这个GameObejct销毁,都不会释放这个Texture的内存?必须在OnDestroy 里销毁才可以呢?

A1:因为某张Texture的内存只会有一份,但是可能会被多个对象引用,所以不可能跟随Component或GameObject的销毁而销毁。

估计是考虑到资源管理(某张Texture当前帧不用了,可能过两帧又要用了,而这部分IO消耗不小,所以需要开发者自行管理),所以这部分并没有走GC。使用Resources.UnloadAsset卸载Texture。

感谢凯奥斯@UWA问答社区提供了回答

A2:Component销毁 或者 Gameobject销毁都不会卸掉new出来的Texture的内存,需要调用Object.Destroy()方法,把new出来的Texture对象作为参数传进去,然后查看Profiler就可以验证。

感谢上午八点@UWA问答社区提供了回答

编辑器

Q:有办法临时屏蔽掉脚本的一些编译Warning吗?比如 The variable 'xxx' is declared but never used之类的。

A1:File->Build Settings->Player Settings->Logging

A2:强烈建议题主修掉这些Warning,而不是屏蔽掉它们。我觉得,程序保证代码没有Bug是底线,没有Warning是合格线……尤其是你举例的这种,虽然编译器会帮你做优化,但是保不齐什么时候写其他逻辑的时候会坑了你。

感谢贾伟昊@UWA问答社区提供了回答

动画

Q:游戏在运行一段时间后,出现了一个CPU高占用函数:Director.ProcessPlaySateChanges ,它产生了3616ms的耗时,请问这是怎么产生的,确认C#代码中无此方法调用,有人遇到过这个问题吗?(版本Unity 5.6.5p3)

A:经排查已找到原因,是UI中的一个播放动画前调用了函数 Animator.Rebind()导致的。

感谢张剑@UWA问答社区提供了问题和回答

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站(answer.uwa4d.com)上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。返回搜狐,查看更多

责任编辑:

java视频压缩 lz4_关于LZMA和LZ4压缩的疑惑解析相关推荐

  1. java视频压缩 lz4_一种视频序列帧的压缩方法、解压方法及装置与流程

    技术特征: 1.一种视频序列帧的压缩方法,其特征在于,包括: 在视频帧数据压缩时,对解析到的第一帧视频帧数据使用lz4算法进行压缩并保存至视频文件中: 对之后解析到的每一帧视频帧数据都与之前一帧视频帧 ...

  2. Unity加载优化-将基于LZMA的ab压缩方案修改为LZ4压缩的过程

    # 观前提示 本文适合需要了解LZMA以及LZ4进行ab打包方案同学,以及会将一些资源管理的方案.如果恰好你也用xlua-framework,那就更适合你了. # 优化起因 最近新游戏在Iphone6 ...

  3. 7z压缩 lzma流式压缩、解压缩的实现 C语言

    最近项目中遇到OTA固件升级,压缩由上位机实现,解压缩在boot启动时,读取固件内容后边解压边加载数据的方式启动. 前期预研了三种压缩方案,分别是lz4.zip.7z,代码仓库放在下面,三者各自的原理 ...

  4. lzma和lz4的速度比较

    lzma和lz4速度比较 Compressed file size in bytes gzip bzip2 lzma lzma -e xz xz -e lz4 lzop 1 124875819 (12 ...

  5. lucene LZ4 会将doc存储在一个chunk里进行Lz4压缩 ES的_source便如此

    默认情况下,Elasticsearch 用 JSON 字符串来表示文档主体保存在 _source 字段中.像其他保存的字段一样,_source 字段也会在写入硬盘前压缩.The _source is ...

  6. Java实现将文件或者文件夹压缩成zip

    Java实现将文件或者文件夹压缩成zip 最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功 ...

  7. java Web程序使用wro4j合并、压缩js、css等静态资源

    在Web项目中,js.css合并压缩,不仅有利于减少Http请求数量.减少宽带资源占用,还能有效的管理各种js.css的引入,使整个项目更加有序.而对于访问用户来说,其更大的好处是增加了页面的打开速度 ...

  8. linux lzma命令,Ubuntu: 压缩与解压缩LZMA文件

    什么是LZMA格式呢?当遇到LZMA格式的压缩文档时我们该怎么解压呢?如果我们想创建LZMA该用什么工具呢?就让我们快速浏览一下吧. 1.什么是LZMA格式 LZMA(Lempel-Ziv-Marko ...

  9. Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示“不可预料的压缩文件末端”和“CRC校验失败”

    Java多word文件生成后进行压缩并导出下载后,压缩文件损坏并提示"不可预料的压缩文件末端"和"CRC校验失败" WinRAR 打开情况: 提示不可预料的压缩 ...

最新文章

  1. 沃尔玛开设智慧零售实验室,正面硬刚 Amazon Go
  2. 清华旷视让全连接层“内卷”,卷出MLP性能新高度
  3. CES新观察:智能应用全面开花 “陆海空”新品值得关注
  4. HTML5 localStorage本地儲存
  5. java使用动态代理来实现AOP(日志记录)的实例代码
  6. 异常空格,ASCII (194,160)问题
  7. jquery append 动态添加的元素事件on 不起作用的解决方案
  8. eclipse 保存html 提示 save could not be completed
  9. (原创)我也玩万能表单(自定义表单)(一)
  10. sql中什么时候应用临时表_SQL数据仓库环境中的临时表应用程序
  11. Vue3传值(一) props: 父组件向子组件传值
  12. set获取元素_C++与STL入门(4):关联容器:集合set
  13. 【福利】PyTorch中文版官方教程来啦(附下载)
  14. 科目3|软考高项论文写作技巧
  15. 评价模型总结——个人学习笔记(二)
  16. java 迪杰斯特拉_JAVA实现最短距离算法之迪杰斯特拉算法
  17. Angular快速上手
  18. 微信video 视频
  19. Temporary Store limit is 51200 mb, whilst the temporary data directory
  20. 开源全景图查看器-360player_v3.0更新

热门文章

  1. LeetCode 374. 猜数字大小(二分查找)
  2. LeetCode 437. 路径总和 III(双重递归)
  3. python中的_init_的使用
  4. NLP、炼丹技巧和基础理论文章索引
  5. Android增量代码测试覆盖率工具
  6. 论文浅尝 - IJCAI | Knowledge is NOT always you need: 外部知识注入预训练模型的利与弊...
  7. 何使用BERT模型实现中文的文本分类
  8. 玩转算法面试-第三章
  9. SQL 数据分析常用语句
  10. 百年诺奖的那些争议与放弃