一律使用for ,字典使用foreach原因: 每次foreach產生一個臨時的迭代器對象,迭代器會額外的分配內存。3:頻繁調用的函數(shù)中,如果有臨時變量是引用類型,要將其改為成員變量。避免頻繁的堆對象的創(chuàng)建和釋放。4:如果函數(shù)運行需要一個List 需要設置List為成員變量 獨立與函數(shù)的運行,可以通過clear()函數(shù)清空,重復使用全局成員集合,清空函數(shù)不會刪除內存空間,大大的減輕性能的負擔。">

惠民福利国产午夜成人av在线播放_国产精品区一区二区三亚洲欧美日韩另类在线_免费无码婬片AAA_日韩精品中文字幕本一本二

Unity 性能優(yōu)化方案

來源:CSDN 瀏覽量:189 發(fā)布時間:2018-12-28 11:09:35

** c# 語言層面的優(yōu)化**

1:主要思想是減少存的動態(tài)分配和釋放,以及內存泄露,減少垃圾回收。

(1)字符串的處理 使用stringbuild 類代替string 進行多個字符串的拼接。

(2)String.format();

以上的方法都是性能比較優(yōu)化的方法

避免使用“+”“aaa”+“bbb”這種方式 原因是“+”對字符串進行拼接,會導致臨時

堆string 對象發(fā)生頻繁的堆對象的分配和釋放。

2:盡可能使用for循環(huán)代替foreach

數(shù)組 泛型list<> 一律使用for ,字典使用foreach

原因: 每次foreach產生一個臨時的迭代器對象,迭代器會額外的分配內存。

3:頻繁調用的函數(shù)中,如果有臨時變量是引用類型,要將其改為成員變量。避免頻繁的堆對象的創(chuàng)建和釋放。

4:如果函數(shù)運行需要一個List 需要設置List為成員變量 獨立與函數(shù)的運行,可以

通過clear()函數(shù)清空,重復使用全局成員集合,清空函數(shù)不會刪除內存空間,大大的減輕性能的負擔。

5:避免使用Lambda表達式,存在內存泄露的內存隱患。

6:盡量使用對象池 避免對象的頻繁創(chuàng)建和釋放,導致大量無效內存的積累,引發(fā)GC(垃圾回收)操作,造成性能的降低

7:避免裝箱和拆箱的操作,會導致堆內存的分配。

8:避免使用AraayList會把所有插入的數(shù)據(jù)當作object類處理,存在一個裝箱的過程

盡量使用泛型List<>;

9:避免使用反射機制,運行時獲取類型信息,性能低下。

10:即時的將對象設置為null 委托事件即時注銷。

Unity腳本開發(fā)方面:

基本思想減少動態(tài)內存分配和釋放,減少耗時函數(shù)的調用,盡可能的使用緩存。

1:控制Startcorountien 的使用次數(shù),避免頻繁的開啟協(xié)程,開啟一個協(xié)程至少分配37B的內存空間(corountien類的實例 分配21B Enumerator 分配16B)

如果僅僅是延遲運行,定時運行函數(shù),可以使用invoke invokerepeating 代替

2:對象查找 gameobject.find(); 全局的查找方式,無法查找隱藏的對象,效率低下

Transform.find 從自身位置查找,性能較優(yōu)的推薦方法

Gameobject.findobjectswithTag 通過標簽查找,效率較高,但是需要設置標簽稍顯麻煩。

建議在Awake 或者Start 函數(shù)中查找對象并保存引用,切忌在Update中動態(tài)的查找

3:緩存組件

注意獲取組件的方法GetCompent 方法大約會分配39B的堆內存,并且GetCompent是去訪問unity原生代碼效率很低,使用緩存訪問,性能相差幾十倍。緩存訪問性能要高得多。

(a)盡量避免在Update函數(shù)中做計算,可以使用InvokeRepeating,間隔一段計算一次。

(b)避免使用SendMessage 性能底下,使用了反射機制,要使用委托 delegate的事件模擬消息機制。

(c)刪除無用的預制體上的組件,刪除類中無用的函數(shù)。

(d)腳本的禁用,腳本使用的時候開啟,不用的時候關閉,需要專門寫一套管理機制。

圖形方面

1.不要使用實時陰影,使用陰影紋理或者簡單的圖片模擬陰影。

2.減少頂點,減少三角面數(shù),峰值小于10w面/每幀,使用LOD進行多層次模型設置,進行遮擋。

3.減少Drawcall 峰值<200 對場景物件 比如說:石頭,樹木等使用相同材質相同貼圖的物體進行批處理,降低DC。人物模型(人物模型一般都是帶骨骼的)SkinMesh。即便使用相同的材質貼圖,DC也不能進行批處理。使用Lightmap技術降低DC。 UI圖素進行合并(打包圖集)降低DC。

4.盡量使用簡單材質,適合移動平臺(手機)Mobile這種Shader或者使用自定義一些優(yōu)化過的Shader,高級Shader嚴重降低幀率,加大能耗,或者不可用。

5.在紋理和質量之間做平衡,在保證質量不受太大影響的情況下,盡量使用小尺寸的紋理,提升效率。減少安裝包的大小,九宮格等

6.減少骨骼數(shù)量的使用15個上下左右,減少粒子系統(tǒng),粒子的數(shù)量。盡量減少粒子數(shù)量。

7.共享材質 多一個材質DC就會上升 使用共享材質 將多張貼圖畫在一張較大的貼圖上面,達到共享材質的作用。

8.減少,水面折射效果,或者霧效果。

編程過程中難免會出現(xiàn)差錯,歡迎大牛批評指正。本人專注圖形圖像開發(fā),歡迎大家共同交流與學習。

--------------------- 


原文:https://blog.csdn.net/weixin_43967425/article/details/84928476