UWA发布 | Unity手游性能年度蓝皮书

UWA本次发布的《2023-2024年度Unity手游性能蓝皮书》将汇总游戏行业使用Unity引擎进行手游开发过程中及游戏上线后的性能表现,从测试机型分布、引擎各模块开销、内存占用等方面剖析定位Unity手游性能瓶颈和趋势,反映了Unity手游行业的现状,帮助游戏开发商寻找合适的性能定位和提升方案。

这是侑虎科技原创文章,欢迎转发分享,未经官方授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。


报告目录:
1)Unity手游测试机型分布
2)Unity手游CPU模块性能开销分析
3)Unity手游内存模块性能开销分析
4)Unity手游GPU模块性能开销分析

本次发布我们针对不同档次的机型进行分档,分档的依据为UWA根据设备的算力。以下是每种档位的典型机型:

高端机:小米10、小米11、红米K40、小米9、小米13、小米12、HUAWEI P40、红米K50、Galaxy S21、HUAWEI P40 Pro、华为Mate 40 Pro

中端机:小米8、OPPO R17、荣耀9X、荣耀V20、华为P30、红米K30、红米note8、小米6、小米MIX2

◆◆◆◆

Unity手游测试机型分布

在本周期的游戏研发团队的测试中,我们统计了项目组在日常研发过程中使用的测试手机品牌和具体型号的占比,反映出游戏研发团队用于性能测试的移动设备的选择偏好。

各品牌的使用占比

游戏研发团队用于性能测试的机型主流品牌依次是华为(17%)、小米(15%)、红米(15%)、Vivo (11%)、三星(10%)和OPPO (10%);由于游戏出海的需求,三星手机的占比依然较高,且在出海的地区中三星的占比远高于小米和Vivo。

注:由于一个项目可以同时使用多个品牌的设备进行测试,统计中进行了规范化使占比总和为100% 。


Top 20 测试设备(按项目占比计算)

  • 小米品牌以绝对性优势在测试机型中拔得头筹,Top 3机型分别为小米10、小米8和小米11;
  • 华为品牌的Top 3机型分别是华为P30、华为P40和华为P40 Pro;
  • Top 20机型中没有低端机型。

Top 20 测试设备使用趋势(按项目占比计算)

以小米8、小米10和小米11作为测试机的数量明显提升;
上一年度的低端机代表红米 4X已退出Top 20排名。


通过UWA Pipeline完成自动化测试的占比趋势

我们发现最近一年来,大家在自动化测试方面有了长足的进步,截止到2024年Q1底,已经有23%的UWA性能测评报告通过自动化测试提交到UWA后台分析系统。这说明自动化测试在大量项目组里已经得到了很好地执行和落地,虽然自动化脚本的编写和维护依然有一定的门槛,但很多团队已经找到了突破口,一旦这种体系建立起来,研发的质量和效率都将得到大幅度提高。


FPS均值总体情况

不同档次设备的FPS均值表现

从已有的测试数据看,高达44%的项目帧率在20-30帧之间,24%的项目在45-60帧之间。说明大部分的项目还是趋于30帧的目标做优化,但同时也说明目前已经有较多项目开始以60帧为目标进行游戏开发,高端设备(非顶端)上已经有近25%的项目以60帧作为目标。

在中低端设备上:73%的项目未到达30帧,26%的项目未达到20帧;
在中端设备上:62%的项目未达到30帧;
在高端设备上:50%的项目未达到30帧;
在顶级设备上:37%的项目未达到30帧,3%的项目达到60帧。


不同档次设备的FPS均值走势

顶级设备的帧率(均值)在37帧左右;
高端设备的帧率(均值)在32帧左右;
中端设备的帧率(均值)在29帧左右;
中低端设备的帧率(均值)在24帧左右。


Jank均值总体情况

不同档次设备的Jank值走势

卡顿均值在2023年Q3的表现上仰,后续卡顿值维持在11次/分钟,建议研发团队多使用UWA GOT Online - Overview模式测试,并通过卡顿分析功能来进行检测和优化。


下面我们来具体分析Unity引擎的主流模块的开销情况。

为了能够更好地反映出各个性能参数的整体使用情况,我们统计了每种性能参数的主体使用范围,其范围区间是[5%~95%],以下数据中P5代表5%,P50代表中位值,P95代表95%。

◆◆◆◆

Unity手游CPU模块性能开销分析

一、渲染模块

DrawCall数量的主体范围均值

半透明渲染DrawCall主体范围均值

不透明渲染DrawCall主体范围均值

DrawCall Batches数量的主体范围均值

从上述的数据中可以看出,URP项目在通过合理的Batch之后,基本上都控制在了合理范围内,说明SRP Batch的合批效果非常突出,这也是UWA推荐研发团队要深入学习URP的原因。


Triangle数量的主体范围均值

同屏渲染面片数在不同档次的设备上画质分级效果已经并不突出,建议研发团队进一步加大场景、角色建模的复杂度,将模型的细节更加突出。


二、逻辑代码

GC调用频率(帧/次)

仅有32%的项目将GC调用频率控制在1000帧/次以上;51%左右的项目小于600帧/次,说明GC问题依然值得关注。

不同档次设备的GC调用频率

对于GC的优化,建议研发团队一方面继续优化自身逻辑代码的堆内存分配,一方面推荐大家使用Unity引擎的Incremental GC功能,来降低每帧GC的CPU耗时。


三、UI模块

目前我们主要统计了NGUI、UGUI和FGUI的占比情况。三种UI解决方案在这一年中,总体走势都较为平稳,UGUI依然是垄断地位,最高时可达86%;同时,依然有7%左右的用户在使用NGUI,FGUI的使用比例在7%左右。

UI 类型占比

UI 类型占比走势

接下来,我们以统计范围内最为主流的UGUI来进一步分析。

UGUI耗时均值分布

Canvas.SendWillRenderCanvases CPU耗时均值分布

UI模块的性能开销依然很高,但相较于去年,确实有进一步提升。这主要是在这一年多以来,各大研发团队对于UGUI的理解和掌握都在不断深入。当然,UGUI的使用也会有明显的性能问题,主要有以下四方面:

  1. DrawCall;
  2. 重建;
  3. Overdraw;
  4. 主线程阻塞。

针对以上问题,大家可以通过UWA学堂(https://edu.uwa4d.com)中UI相关的技术文章和视频进行学习和了解,相信对帮助大家快速提升UI方面的技术理解大有裨益。


四、动画模块

Animators.Update耗时主体范围均值

不同档次设备Animators.Update耗时均值走势

除了中低端设备,其他档次设备的动画性能的趋势表现都较为平稳,说明大家对于动画模块的使用较为合理的。除了中端设备,设备动画模块的性能耗时在2023年Q4均有所上涨。

同时,AnimationClipPlayable功能也非常值得研发团队后续研究和关注,它对于动画系统性能方面的提升有很大的潜力可以挖掘。


五、物理模块

Physics.Processing耗时均值的主体范围

物理模块耗时走势

物理模块的整体耗时相对比较平稳,这得益于越来越多的研发团队对于物理引擎开启的必要性做了更深入的了解。

同时,随着大家对于场景和角色物理模拟的逼真度要求越来越高,布料、布娃娃系统相关的插件开始逐步被广泛使用。特别是今年我们关注到不少团队开始使用Magica Cloth并取得了不错的性能效果,因此建议研发团队对其进行研究关注。


六、粒子模块

ParticleSystem.Update耗时的主体范围均值

粒子系统耗时均值走势

不同档次设备粒子系统耗时均值走势

提示研发团队注意两方面:
1)建议针对粒子系统根据不同设备的性能进行不同程度的调整,从而进一步降低粒子系统的CPU耗时和内存占用;
2)针对技能特效建议进行定期自动化地检测,可以参考深圳雷霆的特效自动化检测方案。

◆◆◆◆

Unity手游内存分布

一、总体内存

PSS内存占用峰值总体情况

不同内存设备的PSS内存占用峰值

PSS内存占用峰值走势

不同内存设备PSS内存占用峰值走势

4GB内存以下设备的内存占用(中位值)在800MB-1.2GB之间,4GB内存以上设备的内存占用在1.2GB-1.6GB(中位值)之间,且无论是低端、中端还是高端,整体都呈上升趋势。


二、总体堆内存

Mono内存占用峰值总体情况

不同内存设备的Mono内存占用峰值

Mono内存占用峰值走势

不同内存设备的Mono内存占用峰值走势

总体堆内存一直是项目的内存瓶颈,虽然在过去一年有所起伏,整体堆内存都高达90MB以上,且超过1/3的项目高达120MB。这主要是游戏的重度化所致,但另一方面也是研发团队对于Mono堆内存分配疏于管理所致,例如配置文件的序列化库使用不当等,建议研发团队在项目中前期选择序列化库时尽可能做更多的调研或者实验,来制定更合适合于自身项目的序列化配表解决方案。

项目的内存占用很大一部分来自于资源的使用,下面我们将对项目中主流资源的使用情况进行分析。


三、纹理资源内存

纹理内存占用峰值总体情况

不同内存设备的纹理内存占用峰值

纹理内存占用峰值走势

不同内存设备的纹理内存占用峰值走势

虽然硬件设备和画质要求在不断提升,但大家在高内存设备上的画质分级的设计上还不够明显,效果差异尚未拉开。这说明大量项目在中高端设备上并未很好地利用设备的硬件优势,UWA认为,在当下的高端甚至旗舰设备上,大家的游戏品质依然有很大的可提升空间。


ASTC/ETC格式纹理覆盖率走势

ASTC/ETC格式纹理运行时数量占比走势

使用ASTC格式的项目越来越多,且自身资源的数量在项目中的占比也在快速升高。就目前我们观测到的项目而言,在国内,ASTC已经成为目前游戏市场的主流格式,基本上大家可以直接选择该格式成为项目纹理的解决方案。而如果考虑出海,则建议研发团队通过更多当地运营项目或渠道数据来谨慎选择ASTC或ETC2格式。


四、网格资源内存

网格内存占用峰值总体情况

不同内存设备的网格内存占用峰值

网格内存占用峰值走势

不同内存设备的网格内存占用峰值走势

网格峰值内存的中位数使用内存均在30MB以下,该值偏低,由于设备内存在不断增加,研发团队可以考虑进一步加大场景、角色建模的复杂度,将模型的细节更加突出。


五、动画资源内存

动画片段内存占用峰值总体情况

不同内存设备的动画片段内存占用峰值

动画片段内存占用峰值走势

不同内存设备的动画片段内存占用峰值走势

动画模块的内存使用趋势在2023年Q3有明显的上升,峰值内存的均值长期维持在20MB之内。


六、Shader资源内存

Shader内存占用峰值总体情况

不同内存设备的Shader内存占用峰值

Shader内存占用峰值走势

不同内存设备的Shader内存占用峰值走势

Shader资源内存峰值大幅上升的主要原因是不少项目进行了Unity版本的升级,属于正常现象。Unity 2019.4.21以后,Shader的内存统计发生了变化。原来统计在ShaderLab中的内存现在也被算在Shader资源本身了。

这里,UWA仍然需要提醒的是,Standard Shader在大家的项目中被经常误引入进来,建议大家在UWA性能简报中的“具体资源使用信息”中特别关注Standard Shader的使用情况。

同时,也建议研发团队结合本地资源检测服务,对Shader相关的规则做检测,尤其是变体数量。


七、RenderTexture资源内存

RenderTexture内存占用峰值总体情况

不同内存设备的RenderTexture内存占用峰值

不同内存设备的RenderTexture内存占用峰值分布

RenderTexture内存占用峰值走势

不同档次设备的RenderTexture内存占用峰值走势

不同档位机型上的RenderTexture内存占用都有波动,且在RT的效果分级上取得了一定的成效。


八、粒子系统资源内存

粒子系统内存占用峰值总体情况

不同内存设备的粒子系统内存分布占用峰值

不同内存设备的粒子系统内存分布占用峰值

粒子系统内存分布占用峰值走势

不同档次设备的粒子系统内存分布占用峰值走势

粒子系统的使用数量在逐步提升,并保持在10~25MB之间,说明游戏团队的特效品质在不断提升。UWA建议大家在不断提升特效品质的同时,切记要经常检测特效的制作质量和性能开销,因为美术人员如果不了解特效的制作特点,很可能会造成“做的越多、返工越多”的现象,这样就会造成大量的研发资源浪费,甚至导致项目上线的延期。

对此,UWA推出的本地资源检测服务,针对项目工程中的静态资源(比如纹理、网格、音频、动画以及粒子系统、代码设置等等)可做检测,来检测美术资源是否有设置不合理,做到静态资源的及时问题反馈、及时修复。

◆◆◆◆

Unity手游GPU模块性能开销分析

GPU重要性能参数

从2023年的Q2开始,我们的GOT Online产品开始陆续推出GPU端的性能分析指标,我们希望通过提供更多有价值的性能指标,来为游戏项目在GPU方面提供更好的分析和优化方案。通过这一年来的摸索,我们在整个行业内积累了大量的GPU端相关性能数据,接下来,我们将针对较为重要的指标来进行分享,希望这些统计数据能够对大家理解和分析自己项目在GPU端的性能问题有所帮助。由于过去一年内,UWA的GPU性能指标陆续上线,且针对不同品牌的芯片,其性能指标也差异很多,所以接下来的数据展示主要来自于Mali和高通芯片,且对其对应的性能参数进行了归类,希望可以让这些性能指标更符合大家的理解。

1. GPU耗时均值走势
GPU耗时是每个项目都最为关注的GPU性能指标,我们在这个方面迭代了大量的计算版本来提升该数值的精准性。目前该数值可以针对不同的芯片来进行较为精准地反馈,下面是Mali芯片和Adreno芯片上该指标的性能趋势。

从上图可以看出,无论是何种芯片,GPU耗时均值均在15~25ms区间内,且有小幅上升的趋势。但是,当我们进一步按照设备档位来进一步细分GPU开销时,则会明显发现,当下游戏在中低端设备上的GPU性能压力较大,如下图所示,P95数值均大幅高于33ms。

2. GPU Clocks指标统计
为了更精准地让研发团队了解到自己项目的GPU压力,我们也统计了GPU Clocks指标的参数范围和变化趋势,具体如下图所示。

GPU Clocks均值走势

通过趋势图我们可以看出游戏项目依然再向精品化趋势过渡,但研发团队更需要关注的是该参数的主体,通过主体范围的相关数值,研发团队可以进一步针对自身项目来衡量和制定自身项目的研发标准。

GPU Clocks均值主体范围分布

GPU Clocks峰值走势

GPU Clocks峰值主体范围分布

3. GPU利用率(GPU Utilization)
以Mali芯片为例,我们统计了近一年来,大量项目的利用率均值和峰值分布情况,如下图所示:

GPU Usage均值主体范围分布

GPU Usage峰值主体范围分布

从上图可以看出,目前大部分游戏项目在中低端档次设备上,都存在不同程度的GPU利用率过大问题,这样和上面GPU耗时分析相吻合,因此,建议研发团队特别关注自身项目在中低端档次设备上的GPU性能压力,对设备分级和GPU性能选择进行更进一步的细致划分,从而提高中低端设备玩家的游戏体验。

4. Fragment Shaded参数统计
该参数统计每帧设备通过Fragment Shader来渲染的像素值,就目前移动游戏而言,其最大的GPU性能压力主要(80%+)来自于Fragment Shading。所以,在UWA GOT Online报告中,会非常详细地对其进行统计和分析。下图为不同芯片厂商中,Fragment Shaded参数的均值和峰值趋势走势。从图中可以看出,虽然均值走势相对比较平稳,但峰值走势却在近两个季度大幅上升。这也预示着未来GPU性能瓶颈依会在整个游戏行业进一步凸显。

Fragment Shaded参数均值趋势

Fragment Shaded参数峰值趋势

近一年来,该性能参数在不同芯片上的分布范围,我们将其重点罗列如下,研发团队可以根据自己项目的GOT Online报告来进行比对。

Fragment Shaded均值主体范围分布

Fragment Shaded峰值主体范围分布

5. 总体带宽均值走势
GPU带宽是GPU端非常重要的性能指标,特别是在当下的移动游戏上。因为带宽过高会直接影响设备发热,进而导致设备降频。设备一旦降频,无论是CPU还是GPU,其性能均会受到极大影响,所以,移动游戏研发团队需要不断关注自己项目的GPU带宽问题,及早发现、尽快解决。

下图为Mali芯片和Adreno芯片的平均带宽占用趋势,基本上都控制在60~80MB/帧,该范围较为合理。因为如果游戏以30帧/秒的帧率进行运行,那么每秒的GPU带宽将达到1.8~2.4GB,一般我们建议主流机型(比如小米10)的带宽量尽可能控制在3.0GB/秒以下较为合适,但如果您的游戏希望达到60帧,那么该流量则过大了,会很快导致设备发热进而降频,因此,UWA建议研发团队尽早通过量化指标来建立研发标准,否则越到研发后期,返工成本越高。

总体带宽均值主体范围分布

6. Overdraw分析
Overdraw对于GPU性能的重要程度不言而喻,Overdraw层数越高,意味着每帧GPU要渲染的像素越多,如果Shader的复杂程度也很高,那么GPU的性能压力将会十分巨大。因此,在GOT Online报告中就非常重视Overdraw层数的分析,下图则是这一年来现有测试游戏Overdraw的统计分析,我们将以均值和峰值来进行展示。

Overdraw层数均值走势
在最近一年的移动游戏测试中,无论是Mali芯片还是Adreno芯片,其Overdraw层数基本上都维持在6~8层左右,如下图所示。

Overdraw层数均值主体范围分布
下图则是两款芯片上Overdraw层数的细致分布情况。

Overdraw层数峰值走势
在峰值方面,Overdraw层数峰值逐季度上升,如下所示。一方面随着我们GPU模式的推出,最近一年的GPU测试游戏项目在不断增加;另一方面,也是移动游戏同样在朝着精品化不断发展。对此,UWA建议研发团队在研发过程中,特别注意Overdraw的峰值区域,查看其是否使用合理。一般情况下,造成Overdraw层数较高的原因主要如下:
(1) 技能特效、场景特效(烟、雾、云等)的不合理制作;
(2) UI界面的叠层过多,特别是不可见的UI界面需要特别注意,“不可见”不代表不渲染;
(3) 多个渲染相机同时工作,但玩家很可能只看到少数几个。这种情况本质与第(2)点相同,玩家没看到,但GPU确实实时渲染,造成不必要的资源计算浪费。

造成Overdraw层数过高的情况还有很多,在此我们无法一一列举,但我们建议研发团队在日常的研发工作中,尽可能将其作为性能测试的常备观察项,以便及时发现问题,及时解决问题。

Overdraw层数峰值主体范围分布

我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、分类等,让数据更具有代表性和说服力。

*本报告中的数据最终解释权归侑虎科技所有。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Xtuner微调

环境安装 studio-conda xtuner0.1.17 conda activate xtuner0.1.17 进入家目录 (~的意思是 “当前用户的home路径”) cd ~ 创建版本文件夹并进入,以跟随本教程 mkdir -p /root/xtuner0117 && cd /root/xtuner0117 拉取 0.1.17 的版…

【课程系列05】某心科技AI大模型微调实战营-应用篇

网盘链接 链接: https://pan.baidu.com/s/1oARULXsXn8frkqq4ZKHBLA --来自百度网盘超级会员v6的分享 课程收获 课程内容涉及大模型的介绍、Transformer、Encoder、高级微调技术、Alpaca、AdaLoRA、QLoRA、Prefix Tuning和Quantization等主题 课程截图

CVE-2020-1957 漏洞复现

先声明一下,免杀还是会更的,不过中间可能会穿插一下渗透的内容!!! 踩坑点: 在一开始翻阅了CSDN之后,发现不同文章之间存在出入,于是最后去了CVE的官方文档,和参考一些国…

Linux使用lrzsz实现虚拟机和本机进行文件传输

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、lrzsz是什么?二、使用步骤1.下载lrzsz2.文件传输 前言 提示:这里可以添加本文要记录的大概内容: 使用lrzsz代替xfpt进行…

基于51单片机FM数字收音机设计

基于51单片机FM数字收音机 (程序+原理图+PCB+设计报告) 功能介绍 具体功能: 该系统利主要由STC89C51单片机、液晶显示器、按键、调频收音模块TEA5767、功放LM386组成。 1.收音芯片采用TEA5767模块&…

# 消息中间件 RocketMQ 高级功能和源码分析(四)

消息中间件 RocketMQ 高级功能和源码分析(四) 一、 消息中间件 RocketMQ 源码分析:回顾 NameServer 架构设计。 1、RocketMQ 架构设计 消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer&…

CSS3基本语法

文章目录 一、CSS引入方式二、选择器1、标签选择器2、类选择器3、id选择器4、通配符选择器 三、字体操作1、字体大小2、字体粗细3、字体样式(是否倾斜)4、字体修改常见字体系列 修改字体系列语法 四、文本操作1、文本缩进2、文本水平对齐方式3、文本修饰…

汽车IVI中控开发入门及进阶(二十七):车载摄像头vehicle camera

前言: 在车载IVI、智能座舱系统中,有一个重要的应用场景就是视频。视频应用又可分为三种,一种是直接解码U盘、SD卡里面的视频文件进行播放,一种是手机投屏,就是把手机投屏软件已视频方式投屏到显示屏上显示,另外一种就是对视频采集设备(主要就是摄像头Camera)的视频源…

智能温室大棚在无土栽培中的应用

在全球范围内,农业面临着前所未有的挑战,包括气候变化、土地资源短缺、水资源匮乏等。为了应对这些问题,智能温室大棚成为了一种创新的解决方案。无土栽培作为现代农业的前沿技术,在智能温室的支持下,展现出了巨大的潜…

QT/基于TCP的服务端实现

代码 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),p(new QTcpServer(this))//给服务器指针申请空间 {ui->setupUi(this); }Widget::~Widget() {delete ui; }void W…

室内灰尘对老人小孩危害不容忽视,资深家政推荐除灰尘空气净化器

正所谓“病从口入,尘从窗入”,室内灰尘问题不容小觑。尤其是对老人和小孩来说,灰尘中的有害物质更是威胁健康的重要因素。近期天气炎热,家家户户每天都会开窗通风,然而这也带来了灰尘和毛絮的问题。即使每天打扫&#…

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错:asyncio.exceptions.TimeoutError

使用asyncua模块的call_method方法调用OPC UA的Server端方法报错:asyncio.exceptions.TimeoutError 报错信息如下: Traceback (most recent call last): asyncio.run(main()) File “D:\miniconda3\envs\py31013\lib\asyncio\runners.py”, line 44, in…

PID控制算法学习笔记分享

目录 一、参数设定 二、PID计算公式 三、位置式PID代码实现 四、增量式PID代码实现 五、两种控制算法的优缺点 六、PID算法的改进 一、参数设定 比例系数(kp):P项的作用是根据当前误差的大小来产生一个控制量。它直接与误差成正比&#…

Codeforces Round 953 (Div. 2) A - C 题解

因为有事只做了A-C,都比较简单,全是很简单的思维,明天有空还会添加上D,如果有人需要可以明天常来看看! 进入正题: A. Alice and Books 题意:给你n个数字,将这些数字分到两堆里&am…

【C++初阶路】--- 类和对象(中)

目录 一、this指针1.1 this指针的引出1.2 this指针的特性1.3. C语言和C实现Stack的对比 二、类的6个默认成员函数三、构造函数3.1 概念3.2 特性 一、this指针 1.1 this指针的引出 如下定义一个日期类Date class Date { public://void InitDate(Date* const this, int year …

APP自动化测试-Appium常见操作之详讲

一、基本操作 1、点击操作 示例:element.click() 针对元素进行点击操作 2、初始化:输入中文的处理 说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中…

Java--Arrays类

1.数组的工具java.util.Arrays 2.由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 3.查看JDK帮助文档 4.Arrays类中的方法都是static修饰静态的静态方法&…

minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析

minSDK和targetSDK,这两者相当于一个区间。你能够用到targetSDK中最新的API和最酷的新功能,但又需要向后(向下)兼容到minSDK,保证这个区间内的设备都能够正常的执行你的APP。换句话说,想使用Android刚刚推出的新特性,但…

6 PXE高效批量网络装机

6.1部署PXE远程安装服务 在大规模的Liunx应用环境中,如web群集,分布式计算等,服务器往往并不配备光驱设备,在这种情况下,如何为数十乃至上百台服务器裸机快速安装系统呢?传统的USB光驱,移动硬盘…

零编程数据可视化展示:十个简易案例!

数据可视化是呈现数据内在价值的最终手段。数据可视化实例利用各种图表和图形设计手段,合乎逻辑地展示复杂而不直观的数据。为了让用户直观清楚地了解他们想要的数据及其比较关系,数据可视化实例的呈现至关重要。即时设计整理了10个数据可视化实例&#…