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

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

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

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

AssetBundle

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

d272b5a7d0f0a257e74c839c26568090.png

问题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)

62efb074c5a25e5e30b745f17a523a8a.png

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

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

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

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微积分的发现是人类精神的最高胜利

来源 : 数学英才微积分早期的思想基础在25岁以前的伽利略就开始作了一系列实验,发现了许多有关物体在地球引力场运动的基本事实,最基本的就是自由落体定律。开普勒在1619年前后归纳为著名的行星运动三大定律。这些成就对后来的绝大部份的数学…

数据库MySQL/mariadb知识点——触发器

触发器 触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行。 触发器包含三个要素,分别为 事件类型:增删改&#…

【前沿技术】2021九大技术趋势:规模化机器学习、「零信任」架构

来源:智能研究院《德勤2021年技术趋势》报告研究了疫情一年来对企业战略、运营和技术带来的连锁反应,论述了其重大发现:全球企业正在加速数字化战略转型,从而构建「韧性」、开创全新的经营模式。报告讨论了接下来18至24个月及以后…

Java项目打包成exe的详细教程

Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步: 1、 利用Eclipse先把Java项目先打成jar包 2、 利用exe4j工具把jar包转成exe 这里以Java项目(ExeDemo)为例进行讲解 随便在一个位置新建一个文件夹,文件夹的名称也…

数学史上的哲学绝唱——无穷观与数学基础的争论

来源:《广西民族大学学报》2014年11月作者:郭龙先,黄永两千多年来,数学家们一直试图从少数公理出发,根据明确给出的演绎规则推导出其他数学定理,从而把整个数学构造成为一个严密的演绎大厦,然后…

Leetcode--141. 环形链表

给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head …

解读自动驾驶的2020:从硬件角度看,无人车商业化落地难在哪?

来源 :AI前线作者 :滴滴自动驾驶技术团队策划 :陈思「重点问题」什么是合适的无人驾驶车辆平台?复杂场景下的“无人驾驶”,传感器硬件系统还有哪些挑战?告别 demo 硬件系统后,下一个前装量产的必…

Leetcode--142. 环形链表Ⅱ

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有…

他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能

来源:AI科技评论编译 :陈彩娴近日,有一篇发表在arXiv的论文“Deep Learning and the Global Workspace Theory”提出了一个大胆的猜想(或理论)。两位作者认为,当下的深度学习已经可以基于一个意识模型&…

科学史上那些盛极一时的“著名理论”是如何被攻破的?

《雅典学院》名画中的亚里士多德和柏拉图来源 :《自然》百年科学经典制版编辑: Morgan在科学发展的过程中,曾经涌现出不少盛极一时而后被证明是错误的理论。这些理论有的也许在今天看来悖谬荒诞,但是从整个科学发展的过程来看,它们仍然有其作…

AI在智能建筑中的应用和发展

来源:中研网图片来源:网络智能建筑诞生于二十世纪末,第一幢智能建筑于1984年在美国哈特福德 (Hartford)市建成。我国于90年代才起步,但迅猛发展势头令世人瞩目。目前,新技术、新产品在智能建筑中…

SpringBoot核心

1.基本配置 1.1入口类和SrpingBootApplication SpringBoot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法 。在main方法中使用SpringApplication.run,启动springboot项目。 其中EnablieAutoC…

grpc简单使用 java_gRPC学习记录(四)-官方Demo - Java 技术驿站-Java 技术驿站

了解proto3后,接下来看官方Demo作为训练,这里建议看一遍之后自己动手搭建出来,一方面巩固之前的知识,一方面是对整个流程更加熟悉.官方Demo地址: https://github.com/grpc/grpc-java例子是一个简单的路由映射的应用,它允许客户端获取路由特性的信息,生成…

冯端:漫谈物理学的过去、现在与未来

来源: 算法与数学之美撰文: 冯端 (南京大学物理系)“物理学的过去、现在和未来”是一个非常大而且重要的题目,也是一个非常难讲的题目,特别是涉及物理学的未来,结果往往是贻笑大方。这里以历史的透视为主线&#xff0c…

第四次博客

第四次博客 一、测试与正确性论证的比较 测试具有针对性,能从一些方面完美的展现出代码的正确性,但是它的验证度取决于样例的质量。 优点是方便,快捷,结果明显;缺点是可能不会覆盖到方方面面。 正确性论证能从所有的方…

院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶

来源: 中国测绘学会未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业…

Spring Boot-springbootHelloword(一)

什么是springboot sprng家族一个全新的框架 简化我们应用程序的创建和开发的过程,使用默认配置简化了我们以前传统的配置 springboot的特性 能够快速创建spring程序能够使用java main方法启动内嵌的 tomcat 或者jetty服务器运行spring boot程序提供约定的starter p…

原创工作发表难之叶公好龙

来源:张志东科学网博客链接地址:http://blog.sciencenet.cn/blog-2344-1265601.html 最近,科学网上一个热点话题是原创工作发表难不难?以真傻为代表的认为原创工作发表难,以王立新为代表的认为原创工作发表不难。那么&…

java字符的输入流_Java:字节流和字符流(输入流和输出流)

InputStream是抽象基类,所以它不可以创建对象,但它可以用来“接口化编程”,因为大部分子类的函数基类都有定义,所以利用基类来调用函数。FileInputStream是用来读文件数据的流,所以它需要一个文件对象用来实例化&#…

任正非内部重磅发言:华为不可能简单学阿里、亚马逊

来源:券商中国辞旧迎新之际,华为创始人任正非此前在华为企业业务及云业务汇报会上的发言于华为心声社区曝光。任正非指出,华为企业业务要聚焦战略重点,继续做减法,收缩企业业务做战线,认真弄清楚做作战模型…