異步加載+內存分析

異步加載

Resources和AB包的同步加載與異步加載對比代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class AsyncLoad : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//Resources的同步異步加載代碼//同步加載代碼//GameObject.Find("/Canvas/Image").GetComponent<Image>().sprite = Resources.Load<Sprite>("EXP");//通過開啟協同,執行最后一個異步Resources加載資源//StartCoroutine(LoadImage());//AB包的同步異步加載代碼//AssetBundle ab = AssetBundle.LoadFromFile(Config.ABPath + "/test2");//GameObject.Find("/Canvas/Image").GetComponent<Image>().sprite=ab.LoadAsset<Sprite>("EXP");StartCoroutine(LoadAB());}IEnumerator LoadImage(){//開啟一個異步加載ResourceRequest rr = Resources.LoadAsync<Sprite>("EXP");//協同會在加載資源成功后,繼續執行(底層封裝了線程加載資源)yield return rr;//將加載成功的資源,顯示出來GameObject.Find("/Canvas/Image").GetComponent<Image>().sprite = rr.asset as Sprite;}IEnumerator LoadAB(){AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(Config.ABPath + "/test2");yield return abcr;GameObject.Find("/Canvas/Image").GetComponent<Image>().sprite = abcr.assetBundle.LoadAsset<Sprite>("EXP");}
}

????????想要區分是否成功執行異步加載,可以在運行游戲前開啟暫停鍵,之后運行,若跨幀實現圖片加載功能(第一幀圖片為白圖,下一幀圖片加載出指定圖片),則證明成功實現了異步加載功能。

內存分析

以Unity2021版的Profiler視窗為例(建議同學們也打開自己的視窗自行觀察):

我們選擇Profiler視窗中的Memory,并運行游戲觀察其實時操作的內存占用情況。

(個人理解)

?通過Memory Profiler圖觀察,在以AB包為例觀察其各功能在運行時內存的占用情況可知(本次測試觀察Graphics&Graphics Driver),當僅加載AB包時,其內存會短暫出現短幅上升又下降的情況(該AB包為默認壓縮狀態,此過程可說明AB包在解壓),最終下降到趨于運行無操作時內存占用量,說明加載AB包在運行時并不實際占用內存;而當加載圖片時,內存占用量增加,此情況說明當AB包加載資源并顯示到游戲界面時,才實際占用內存;當我們卸載AB包不銷毀圖片時,該張圖片占用的內存不會被釋放,而當我們重新加載AB包資源并加載其他圖片覆蓋未被銷毀的圖片,其圖片會作為游離資源存放在內存中。

原因:Unity的回收機制為"懶回收"機制,它默認不會回收此類游離資源,若實際開發項目需要考慮內存情況,建議自行編寫回收機制(但不建議過于頻繁回收)決定何時回收此類游離資源,釋放內存。

編寫以上測試的代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Memory : MonoBehaviour
{AssetBundle ab;public Image image;public void LoadFile(){ab = AssetBundle.LoadFromFile(Config.ABPath + "/bigtest");}public void LoadImage(){image.sprite = ab.LoadAsset<Sprite>("PanelTest");}public void UnLoadFile(){//參數代表,是否將場景中通過AB包加載出來的資源,同AB包一起銷毀ab.Unload(false);}public void Recycling(){//將所有沒有再使用的資源進行回收Resources.UnloadUnusedAssets();}
}

場景視圖及層級面板情況:

該系列專欄為網課課程筆記,僅用于學習參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75259.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

將視頻m4s文件轉換為mp4格式

將視頻m4s文件轉換為mp4格式 一般情況&#xff1a;偏大的文件為視頻&#xff0c;偏小的文件為音頻。 環境要求&#xff1a;下載并安裝ffmpeg&#xff0c;并配置好環境變量&#xff0c;如下圖&#xff1a; 轉換代碼&#xff1a; import subprocessdef merge_m4s_to_mp4(vide…

EXCEL報錯:無法共享此工作薄,因表包含excel表或xml映射的解決方法

在分享工作薄是&#xff0c;如果出現了“無法共享此工作薄&#xff0c;因表包含excel表或xml映射”的報錯&#xff0c;那么有兩個原因&#xff1a; 1.包含Excel表格&#xff0c;這個也是相對比較常見的原因。 首先選中表格。如果你不知道表的位置在哪&#xff0c;那么在Excel左…

w2ui 水平滾動移動 虛擬列 數據丟失

https://w2ui.com/web/docs/1.5/w2grid.disableCVS https://github.com/vitmalina/w2ui/issues/1398 解決方案來源 問題現象: 窗口縮小 導致多列 出現水平滾動,滾動時觸發本地樣式重繪,導致record undefined,從而引發多列報錯 解決方案: 使用 disableCVS : true 一次加載到d…

在ensp進行OSPF+RIP+靜態網絡架構配置

一、實驗目的 1.Ospf與RIP的雙向引入路由消息 2.Ospf引入靜態路由信息 二、實驗要求 需求&#xff1a; 路由器可以互相ping通 實驗設備&#xff1a; 路由器router7臺 使用ensp搭建實驗壞境&#xff0c;結構如圖所示 三、實驗內容 1.配置R1、R2、R3路由器使用Ospf動態路由…

基于mediapipe深度學習和限定半徑最近鄰分類樹算法的人體摔倒檢測系統python源碼

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 Mediapipe人體姿態檢測原理 4.2 限定半徑最近鄰分類樹算法原理 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 人工智能算法python程序運行環…

deep-sync開源程序插件導出您的 DeepSeek 與 public 聊天

一、軟件介紹 文末提供下載 deep-sync開源程序插件導出您的 DeepSeek 與 public 聊天&#xff0c;這是一個瀏覽器擴展&#xff0c;它允許用戶公開、私下分享他們的聊天對話&#xff0c;并使用密碼或過期鏈接來增強 Deepseek Web UI。該擴展程序在 Deepseek 界面中添加了一個 “…

蘋果簽名是否一定安全呢?

蘋果簽名是一種數字簽名技術&#xff0c;用于驗證應用程序的來源和完整性。當開發者將應用程序提交到蘋果應用商店時&#xff0c;蘋果會對應用進行簽名&#xff0c;這個簽名包含了開發者的身份信息以及應用的相關數據。用戶安裝應用時&#xff0c;設備會驗證簽名的有效性&#…

Outlook客戶端無法連接到服務器,添加賬戶顯示“無網絡連接,請檢查你的網絡設置,然后重試。[2603]”

1、先切換一下到手機熱點或者其他網絡&#xff0c;判斷是不是現在所連接的網絡的問題。如果有VPN代理軟件&#xff0c;網銀軟件&#xff0c;加密軟件在后臺運行&#xff0c;麻煩退出一下。 2、打開電腦上的 控制面板——網絡和Internet——Internet選項——高級——先點擊還原…

Laravel 中使用 JWT 作用戶登錄,身份認證

什么是JWT&#xff1a; JWT 全名 JSON Web Token&#xff0c;是一種開放標準 (RFC 7519)。 用于在網絡應用環境間安全地傳輸信息作為 JSON 對象。 它是一種輕量級的認證和授權機制&#xff0c;特別適合分布式系統的身份驗證。 核心特點 緊湊格式&#xff1a;體積小&#x…

51. “閑轉易”交易平臺小程序(基于springbootvue)

目錄 1.系統的受眾說明 2 關鍵技術介紹 2.1 SSM框架 2.2 Java技術及架構介紹 2.3 MYSQL數據庫 2.4微信小程序框架 2.5 B/S架構 3 需求分析與可行性分析 3.1功能需求分析 3.2 性能需求分析 3.3系統設計規則與運行環境 3.4系統流程分析 3.5 可行性分析 4 系統設計 …

【STM32】GPIO輸入(按鍵)

目錄 一、如何分辨GPIO輸入使用什么電頻二、輸入抖動問題如何消抖三、示例代碼 一、如何分辨GPIO輸入使用什么電頻 先看原理圖 即可知道他的初始輸入狀態需要高電平 判斷可知使用上拉輸入 二、輸入抖動問題如何消抖 電路圖中, 按鍵輸入有額外的電容電阻, 是為了消抖 消抖方…

【Android Studio】配置教程以及解決過程中的問題(詳細版本)

目錄 前言 一、下載安裝 二、配置 三、簡單使用 新建項目 創建默認項目 四、解決過程中的問題 前言 如果你目前不是第一次安裝&#xff0c;那需要完全卸載它。 因為一般電腦卸載 Android Studio 時容易落下一堆配置文件沒刪&#xff0c;卸載不干凈導致無用文件占用空間…

EtherNet/IP轉ProfiNet協議轉換網關驅動西門子PLC與流量計的毫秒級壓力同步控制

一、案例背景 汽車涂裝線的靜電噴涂工藝對壓縮空氣流量穩定性要求極高。原系統中Alicat流量計與西門子PLC因協議差異無法聯動&#xff0c;導致涂料浪費率高達8%。通過JM-EIPM-PN網關實現供氣系統與PLC的深度集成。從而實現了EtherNet/IP轉ProfiNet的通訊。 二、設備連接與配置…

如何從0-1的建設云上穩定性?

一、系統架構 整個系統包含了私有云和公有云兩個節點。前端和服務端存在私有云和公有云兩套系統交互&#xff0c;公有云上的系統為三方黑盒系統。 帶著上面的五點風險和挑戰&#xff0c;我們從前后端的視角整體制定優化策略和方案。 二、前端策略 作為釘釘的合作產品&#xff…

【學Rust寫CAD】17 通用2D仿射變換矩陣結構體(matrix/generic.rs)

源代碼 // matrix.rs use std::ops::{Add, Mul};use std::ops::{Add, Mul};/// 通用2D仿射變換矩陣&#xff08;元素僅需Copy&#xff09; #[derive(Clone, Copy, Debug, PartialEq)] pub struct Matrix<X, Y, Xx, Xy, Yx, Yy> {pub x: X, pub y: Y,pub xx: Xx, pub xy:…

Spring Boot @RequestParam 解析參數時的常見問題及解決方案

1&#xff0c;遇到的問題&#xff1a;將后端接口寫完后我想通過PostMan進行簡單的測試一下&#xff0c;一不小心就遇到了這樣的情況&#xff1a; org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter contractId is not prese…

Golang中間件的原理與實現

一. 什么是 Middleware&#xff1f; 中間件&#xff08;Middleware&#xff09; 是一種 高階函數&#xff0c;它接受一個函數作為輸入&#xff0c;并返回一個經過增強的函數。它的核心思想是通過函數的遞歸嵌套&#xff0c;動態地為函數添加功能。在 Golang 中&#xff0c;中間…

算法設計學習3

實驗目的及要求&#xff1a; 1.加強對結構體的應用。 2.熟悉字符計數排序。 實驗設備環境&#xff1a; 1.微型計算機 2.DEV C(或其他編譯軟件) 實驗步驟&#xff1a; 任務&#xff1a;要求使用自定義函數來實現 輸入一段文本&#xff0c;統計每個字符出現的次數&#xff0c;按…

Vue2和3的vue-router:生命周期、懶加載

Vue2 vue-router 在 Vue 2 中使用 vue-router 可以方便地管理單頁面應用&#xff08;SPA&#xff09;中的路由。理解 vue-router 的生命周期和懶加載機制對于構建高效的 Vue 應用至關重要。以下是一些關鍵點和示例代碼來幫助你理解這些概念。 Vue Router 的生命周期 vue-rou…

【408--考研復習筆記】計算機網絡----知識點速覽

目錄 一、計算機網絡體系結構 1.計算機網絡的定義與功能&#xff1a; 2.網絡體系結構相關概念&#xff1a; 3.OSI 七層模型與 TCP/IP 模型&#xff1a; 4.通信方式與交換技術&#xff1a; 電路交換 報文交換 分組交換 5.端到端通信和點到點通信&#xff1a; 6.計算機…