GC針對的誰
new對象的時候,產生新對象
GC是發生在什么時候
主動調collect接口以及內存分配不足的時候
如何避免gc
別new對象
GC的過程,為什么耗時
每一次GC會經歷以下過程,堆上的對象越多,對象的引用越多,意味著GC所做的工作越多
1:GC會檢查堆上所有的對象
2:GC會檢查所有這些對象的引用是否仍在作用域
3:每個不在作用域的對象都會被標記為待刪除
4:GC刪除每個待刪除的垃圾對象
移動端的優化
GC,UGUI合批,網格重建,跨語言調用,IO,預制體加載大小(特效動態加載),ab包分類
卡牌魚眼列表的實現
利用Horizontal Layout Group的控制自己縮放特性和item的縮放來修改content大小,監聽鼠標事件
全面屏手機為什么可以自適應,自適應是怎么處理的
水滴屏:
修改父節點的anchorMin,跳過水滴
safeAreaRect.offsetMin = Vector2.zero;
safeAreaRect.offsetMax = Vector2.zero;
var resolution = canvas.pixelRect.size;
var offsetX = resolution.x - safeArea.width;
var offsetY = resolution.y - safeArea.height;
safeAreaRect.anchorMin = new Vector2(offsetX / resolution.x, offsetY / resolution.y);
safeAreaRect.anchorMax = new Vector2((resolution.x-offsetX)/ resolution.x, (resolution.y-offsetY)/ resolution.y);
有一個按鈕點擊了沒有反應為什么 pc和手機上
raycast沒勾選,被別人擋住了
c#的字典是什么實現的
Hash算法
無限列表的實現,格子劃完超過1之后的做法,不需要每個設置數據,進去的一行設置位置就行了。滑到下面去怎么跟index變化進行對應
建個字典用數據索引和transform緩存
大地圖劃的很快,或者一下子縮小會不會看到一個圖片沒有加載出來或者一個空的地方
用九宮格加載和精確度低的圖片解決
相機裁剪的流程
先在世界空間下剔除完全不在范圍內的,然后在光柵化出像素點后裁剪
為什么函數出來后值類型離開后會自動釋放
因為值類型是復制的,出棧后棧頂指針收縮復用那片區域,引用是在堆里面
stringbuilder實現
字符數組
texture導入的設置重要的設置
可讀可寫,類型,大小,壓縮格式,minmap是否開啟(開了增加內存,不開分辨率過高增加渲染壓力,顯存過大,傳遞數據drawcall更多)
頭頂UI的優化技巧
1.使用3D做法,避免坐標轉換,可以使用job放在其他線程處理旋轉縮放,位置,缺點canvasgroup,以及布局組件之類的不好使用
2.判斷視野范圍內才更新
3.超過一定距離卸載,跟相機的距離
4.根據距離遠近分幀更新
5.需要時更新,怪物移動以及相機更新
6.加載的時候分幀加載,避免同一幀創建多個
TCP和UDP
tcp:按序到達,實時性沒udp強,要連接才能發送,雙向通信
udp:無法保證順序,單向通信