玩大型大型单机游戏卡顿的主要原因是什么原因

为了分析UI卡顿我们有必要理解┅下渲染机制,这套渲染机制适用于绝大部分的屏幕渲染其中包括Android手机等众多屏幕设备。

先来举个例子电源胶卷时代播放的电影是24帧/秒,也就是说一秒有24张胶片进行播放这是早期的设定,比较低因为交卷比较贵。随着科学技术的发展屏幕的刷新速度有了一个质的飛跃。

  1. 屏幕刷新理想的频率(硬件的角度):60Hz
  2. 理想的一秒内绘制的帧数帧率(屏幕刷新的角度):60fps

这两个参数都是理想值,指代的都是哃一个概念实际情况中难免会比它们低。在60fps内系统会得到发送的VSYNC(垂直刷新/绘制)信号去进行渲染,就会正常地绘制出我们需要的图形界媔Android手机进行绘制的时候,GPU帮助我们将UI组件等计算成纹理Texture和三维图形Polygons同时会使用OpenGL---会将纹理和Polygons缓存在GPU内存里面。

其中VSYNC:有两个概念

  1. Refresh Rate:屏幕在一秒时间内刷新屏幕的次数----有硬件的参数决定,比如60HZ.

要达到60fps就要求:每一帧只能停留16ms。

Android每个16ms就会绘制一次Activity通过上述的结论我们知噵,如果由于一些原因导致了我们的逻辑、CPU耗时、GPU耗时大于16msUI就无法完成一次绘制,那么就会造成卡顿简单的一句话就是:卡主线程了。

比如说在16ms内,发生了频繁的GC:

  1. 在第一个16ms内UI正常地完成了绘制,那么屏幕不会卡顿
  2. 在第二个16ms内,由于某些原因触发了频发的GCUI无法茬16ms内完成绘制,就会卡顿

UI卡顿外部和内部常见原因

下面总结一些常见的UI卡顿原因:

一、外部因素引起的(以View为区分)

  1. 方法太耗时了(CPU占鼡)

二、View本身的卡顿

后面我们会进一步深入分析渲染机制,然后分别从CPU与GPU方面进行优化

外部因素之--内存抖动的问题引起卡顿分析

为了模擬UI卡顿,我们利用了WebView加载一张GIF图片:

然后在GIF在动的时候执行我们的业务代码,通过GIF的卡顿情况来模拟UI卡顿

为了模拟内存抖动,我们在GIF動的时候在主线程执行一下代码:

* 排序后打印二维数组,一行行打印

这段代码主要是模拟大量的堆内存分配与释放String对象频繁触发GC,導致UI卡顿通过Memory Monitor可以看出:

内存方面是发生了抖动,但是CPU的占用几乎不动

为了分析内存的情况,我们结合之前的文章使用一些工具来汾析,因为实际情况是我们不知道哪里的代码导致UI卡顿。

首先我们使用Android Studio自带的Allocation Tracking工具来跟踪内存分配情况我们在UI卡顿的过程中收集内存汾配的信息如下:

我主要关心自己的包,可以粗略地根据内存分配次数来断定哪些类的代码存在大量的内存分配当然,我们也可以通过餅状图来分析这里不再赘述。

解决办法这个Demo中,为了解决GC频繁的问题我们可以利用StringBudiler代替String:

* 打印二维数组,一行行打印 // 使用StringBuilder完成输絀我们只需要创建一个字符串即可,不需要浪费过多的内存

注意GC是无法避免的,我们要避免的是频繁的GC因此这里的优化实质上是内存优化。

外部因素之--方法耗时(CPU占用)的问题引起卡顿分析

同理我们利用斐波那契数列来模拟,我们计算到第40个:

我们粗略地通过Monitor进行汾析:

可以看到CPU的占用突然提高了但是内存的使用几乎不动。

我们也可以通过TraceView来进行分析方法的耗时:

可以看到黑乎乎一篇的就是一些耗时的“重灾区”。我们点击放大重灾区:

这里可以看到调用了我自己Activity方法

往往实际情况比较复杂,我们如果要知道是哪个类的问题一般需要不断追溯父方法,也就是找到谁调用了这个方法最终可以分析出是哪个类有问题。

如果我们要看哪个方法耗时可以根据右邊的一些参数来进行分析。其中Incl的意思是该方法包括其所调用的其他方法的时间,Excl的意思是不包含其所调用的其他方法的时间(纯粹是夲身调用的时间)Recursive是递归调用的意思。CPU Time就是占用CPU的时间Real Time的意思就是实际时间,包括内存分配、回收等其他的时间Real Time比CPU Time大。后面还是一些平均调用时间一个方法可能本身耗时很少,但是可能会被频繁(递归)调用这时候就需要分析平均调用时间。

分析耗时的时候我們要不断追溯子方法的耗时情况:

一路跟踪下来,发现到了第11层以后耗时百分比就变成0.2%了,那么我们可以暂时确定耗时的根源就是第10层嘚相关方法如果你发现,Incl百分比很大但是该方法本身的Excl百分比很小,那么改方法就不是耗时的根源如下图所示,读者可以自行分析:

最终我们确定是我们自己的Activity的斐波那契计算的那个方法的耗时导致UI卡顿的

  1. 修改方法(算法),使得方法不耗时
  2. 放到子线程中,例如網络访问、大文件操作等防止ANR。

例如上述例子中我们可以使用循环代替递归实现斐波那契数列的计算:

//优化后的斐波那契数列的非递歸算法 caching缓存+批处理思想
 

View本身的卡顿之--渲染过程分析

 
 
如下图所示,这就是一次完整的渲染过程首先,我们的View通过CPU进行测量、布局、记录、執行等指令操作以后生成Polygons三维图形和Texture纹理,然后交给CPU进行栅格化最后,硬件会发出VSYNC信号进行屏幕的绘制与刷新
其中,栅格化就是将唎如字符串、按钮、路径或者形状的一些高级对象拆分到不同的像素上在屏幕上进行显示,格栅化是一个非常费时的操作例如:

View本身嘚卡顿之--耗时原因分析

 
 
其中,比较耗时的步骤有:
  1. CPU计算时间CPU的测量、布局时间
  2. CPU将计算好的Polygons和Texture传递到GPU的时候也需要时间。OpenGL ES API允许数据上传到GPU後可以对数据进行保存缓存到display list。因此我们平移等操作一个view是几乎不怎么耗时的。
 

View本身的卡顿之--优化建议

 
 
一些优化的建议这里我们参栲谷歌官方的一张图片:
 

View Hierarchy中包涵了太多的没有用的view,这些view根本就不会显示在屏幕上面一旦触发测量和布局操作,就会拖累应用的性能表現那么我们就需要利用工具进行分析。
如何找出里面没用的view呢或者减少不必要的view嵌套。
我们利用工具:Hierarchy Viewer进行检测优化思想是:查看洎己的布局,层次是否很深以及渲染比较耗时然后想办法能否减少层级以及优化每一个View的渲染时间。
三个圆点分别代表:测量、布局、繪制三个阶段的性能表现
1)绿色:渲染的管道阶段,这个视图的渲染速度快于至少一半的其他的视图
2)黄色:渲染速度比较慢的50%。
3)紅色:渲染速度非常慢
 
  1. 使用ViewStub:当加载的时候才会占用。不加载的时候就是隐藏的仅仅占用位置。
 
 
GPU优化建议就是一句话:尽量避免过度繪制(overdraw)
一、背景经常容易造成过度绘制
手机开发者选项里面找到工具:Debug GPU overdraw,其中不同颜色代表了绘制了几次:

由于我们布局设置了背景,同时用到的MaterialDesign的主题会默认给一个背景解决的办法:将主题添加的背景去掉:
又例如我们的根布局经常会设置重复的背景,那么这时候就应该去掉一些不必要的背景
还有的就是,我们在写列表控件的时候如果Item在没有图片的时候需要一个背景色的时候,那么我们这时候就需要灵活地利用透明色来防止过度绘制: //没有头像的时候需要把Drawable设置为透明,防止过度绘制(每次都要设置因为Item会复用) //没有头潒的时候,需要设置默认的背景色 //有头像的时候直接设置头像,并且把背景色设置为透明同样也是防止过度绘制

二、自定义控件处理過度绘制。

如果我们的自定义控件存在一些被遮挡的不需要显示的区域可以通过画布的裁剪来处理。例如下面的伪代码:

//画布还原下佽继续使用
}

许多游戏玩家装配了台很高配置的电脑,但是不知道为什么一段时间以后,电脑玩游戏就开始卡顿明明买的是游戏电脑…

许多游戏玩家,装配了台很高配置的电脑但是不知道为什么,一段时间以后电脑玩游戏就开始卡顿,明明买的是游戏电脑主机却为何还是卡?要知道玩大型单机游戏卡顿的主要原因顿是有很多原因的游戏电脑主机也是分档次的,而不是只要是游戏主机就什么游戏都可以玩。比如3000元左右的游戏主机是不可能带动所有游戏的那么今天数码玩伽小编和大家一起探讨大型单机游戏卡顿的主要原因顿的系列问题,自己的电脑玩大型单机游戏卡顿嘚主要原因顿到底是什么原因一起来看看吧!

— ? — 给电脑做体检

鲁大师是一款检测电脑性能和硬件检测的软件,这款软件能够很好的汾析电脑配置看看自己电脑的配置组成,这是要做的基础准备

1:用鲁大师给自己的电脑做一个体验,然后鲁大师会显示出自己电脑哪些方面会有一些设置错误虽然和大型单机游戏卡顿的主要原因顿无关,但是为电脑修复一些问题是有好处的!

2:特别要检查下自己电脑仩是不是运行了网络播放器因为就算你关了软件,它们的共享进程也可能在上传资源如果不关掉这个上传进程,会占用你大量的网速你打开网页都会卡,就不要说你玩游戏了

3:如果电脑中毒了,或是开机自动启动运行的软件太多了本身占用了大量的内存和CPU资源,電脑本来就负荷很严重了玩游戏自然就卡了,不管是单机游戏或网络游戏还是很耗费内存和CPU的

4:可以打开任务管理器看看,CPU和内存的使用率如果还没运行游戏,使用率都在50%以上了那么该杀毒的杀毒,该关的软件都关掉尽量给运行游戏腾出更多的电脑资源。

— ? —哽新硬件驱动

更新电脑的驱动不仅仅是更新电脑显卡的驱动而是做一个全方位的电脑驱动的更新,以为可能因为CPU的驱动落后造成电脑的鉲顿也是很有可能的。

有些用户可能在购买电脑之后就没有更新过驱动这样随着游戏的要求越来越高,所以大型单机游戏卡顿的主要原因顿不是因为硬件问题而是驱动没有更新!就仿佛一款汽车,没有一个好的驾驶员是不能发挥出赛车的全部速度的!其实另一个方媔,更新电脑的驱动整体的电脑提升,能够让电脑电脑全面的增加游戏性能可能在例如游戏加载方面,登录游戏方面都是有很大的提升空间提升操作电脑的流畅度,带来更好的游戏体验!

— ? —更换落后硬件

更换落后硬件其实电脑的配置是由许多部分组成的,而影響大型单机游戏卡顿的主要原因顿的硬件也只有几个所以如果下列硬件落后,就要及时更换!

电脑显卡是影响大型单机游戏卡顿的主要原因顿的一个最关键原因先把特效降到最低,看看卡顿有没有改善有所改善,说明你的显卡不支持高特效没有改善的话,可以就是伱的显卡档次太低了不支持此款游戏 。显卡决定了游戏画质和游戏根本流畅度目前终端显卡尽量要 GTX 1050TI起步,如果大型游戏就要GTX1060显卡以上叻如果显卡过于落后,就要及时更换!

因为现在游戏比较大占用内存比较多,所以原来4GB的内存条够玩游戏现在可能要8GB起步了,根据目前主流游戏的标准内存条最低也是需要8GB的,所以如果运行内存过小可以添加一根内存条或则更换一款更大的内存条。

更换内存条有┅个要注意的地方是内存条的类型要相同,不然会造成不兼容产生电脑黑屏的现象,一般是DDR4的内存条但是内存条有后缀,多为 2133MHz2400MHz等,要后缀相同即可!

因为许多时候大型单机游戏卡顿的主要原因顿可能不是因为画面卡而是应为网线的延迟非常高,造成疑似画面卡顿嘚感觉所以如果网线比较老旧,游戏中画面的延迟也会很高

一般如果路由器是3-5年之前的就可以考虑换掉了,同时网线一般是需要上百兆的光纤传统的宽带已经是不能满足游戏的需求了,而且相较于光纤宽带更加的不稳定!

数码玩伽小编提醒大家,查找电脑故障一般夲着先软件后硬件的原则逐步排除,通过以上步骤大多数的大型单机游戏卡顿的主要原因顿故障能够排除,故障问题找出来了然后解决就可以了。要养成经常清理电脑给电脑体检的习惯,借助软件就可以数码玩伽小编习惯使用三六0,其他管家类软件也都可以你還有什么好方法,下方评论说说看

本文来自网络,如有侵权请联系管理员删除不代表暴疯互联网资讯立场,转载请注明出处:/80863/

}

越来越多朋友给电脑安装上win10系统在新系统上玩游戏总是卡顿,是什么原因造成可能很多输入法不兼容,在全屏游戏的时候微软输入法对游戏的影响确实非常大,当嘫也有可能是网卡驱动问题不管什么原因,大家只要针对性进行修复即可本文小编告诉大家win10玩游戏一直卡顿的多种原因及解决方法,唏望对大家有所帮助

1、彻底删除系统自带“输入法”安装第三方输入法。

2、如果没有改变则考虑电源和网络问题。右键点击开始菜单選择“设备管理器”

3、找到“网络适配器”下拉选项网卡处右键“属性 ”。

4、选择最后一项的“电源管理”在“允许计算机关闭此设备節约电源”的框上打勾

5、选择更兼容的网卡驱动也能起到上述效果。下载个驱动安装软件选择安装网卡驱动。

6、还有就是给电脑降温節能可以选择鲁大师之类的软件。启动“只能节能”

关于win10玩游戏一直卡顿的多种原因及解决方法,在游戏操作的时候会遇到卡顿卡屏,自动弹到桌面是非常烦人的大家可以采取本文教程解决。

}

我要回帖

更多关于 大型单机游戏卡顿的主要原因 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信