unity内存优化Texture2D优化

news2024/11/24 2:50:44

作为unity开发者,我们使用memory Profiler来查看内存,本期我们项目中Texture2D的内存占有比较高,为了对这块做优化我们先看下内存的占有情况。

step1 使用memory Profiler对手机应用程序截图

打开截取后的内存页面,选择顶部UnityObjects查看下面的数据,展开Texture2D,下面是截取后的数据。
在这里插入图片描述

step2对图片数据分析

我们可以看到从直观上看纹理数据可分为两种:
情况1
有正常名字的,这类数据一般是通过本地资源加载进来的,如 Resources.Load(“资源路径”)这种方式加载进来的。
情况2
名字为No Name这种,这种文件有两种可能一种是要被销毁的,另一种是网络下载下来的图片,比如网络下载下来的头像,或者其他要展示的2D图片等等。

step3对于情况1的内存释放

正常情况下我们会采取的操作是销毁物体认为这样会回收内存处理如下

 //这样
 Destroy(transform.gameObject);
 //或者这样
 Destroy(gameObject);

但是通过内存分析工具可以看到这样处理后的纹理图片依然驻留在内存中。
出现这样的原因是unity的资源有一层缓存机制,不管是否被调用,在启动资源清理功能前都会驻留在内存中了。
定位到这块问题所以我们修改处理如下

  Destroy(gameObject);
   //卸载未回收资源
  Resources.UnloadUnusedAssets();
  //System.GC.Collect();//回收内存

这样通过资源回收处理就可以释放掉这块的内存了(亲测有效),后面的GC调用可以更保险一些,但是因为GC会导致线程卡顿影响用户体验所以不到万不得已不可乱用。

step4对于情况2的内存释放

因为我们是用的图片资源不是从本地resource加载的所以不能通过Resources.UnloadUnusedAssets这个方法卸载掉图片内存所以我们理解只需要销毁物体即可以销毁掉内存的占用即:

 //这样
 Destroy(transform.gameObject);
 //或者这样
 Destroy(gameObject);

但是从memory Profiler我们看到图片产生的内存还是未销毁,截图如下
在这里插入图片描述
在这里插入图片描述
从help里面我们看到虽然调用了物体的销毁处理,但是托管内存依然存在,即该对象的外部引用一直存在导致这个物体一直无法销毁,看到这里我们思路就有了即将托管对象置为空即可。

//下载头像
 StartCoroutine(ImageLoadManager.LoadNetImage(IvAvatar,SysConfig.instance.unityAvatar));
 //延迟5秒后销毁物体并置空对象
 StartCoroutine(LateTest());
  IEnumerator LateTest()
  {
      yield return new WaitForSeconds(5);
      Destroy(IvAvatar.gameObject);
      IvAvatar = null;
      view["Avatar/IvAvatar"] = null;
      view.Remove("Avatar/IvAvatar");
      Resources.UnloadUnusedAssets();
  }
            

最终通过将物体对象设置为空处理内存被成功回收。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stitcher类实现多图自动拼接

效果展示 第一组: 第二组: 第三组: 第四组: 运行代码 import os import sys import cv2 import numpy as npdef Stitch(imgs,savePath): stitcher cv2.Stitcher.create(cv2.Stitcher_PANORAMA)(result, pano) stitcher.st…

NVIDIA Jetson Xavier NX入门-镜像为jetpack5(1)——镜像烧写

NVIDIA Jetson Xavier NX入门-镜像为jetpack5(1)——镜像烧录 0.博主曾经撰写了关于 NVIDIA Jetson Xavier NX入门-镜像为jetpack4系列的文章。但是升级镜像到jetpack5时出现诸多问题,之前的文章已不再适用。如果想安装jetpack4请参照下面三…

[技术笔记] Flash选型之基础知识芯片分类

1、按照接口分类 分为 Serial串口Flash 和 Parallel并口Flash; 市场大量使用Serial Flash;价格便宜;已满足系统对数据读写速度的要求; Serial Flash已经可以代表 NOR Flash; 小知识: 1)在…

Vue3 使用 v-bind 动态绑定 CSS 样式

在 Vue3 中&#xff0c;可以通过 v-bind 动态绑定 CSS 样式。 语法格式&#xff1a; color: v-bind(数据); 基础使用&#xff1a; <template><h3 class"title">我是父组件</h3><button click"state !state">按钮</button>…

应用程序open如何调用到驱动程序的open函数,inode和file的理解

基础知识&#xff1a; 1. struct inode 每创建一个文件&#xff0c;都会生成一个设备节点inode&#xff1b;可以通过inode找到设备号&#xff0c;然后找到cdv; 驱动只有一份&#xff0c;存在多个同类字符设备的时候&#xff0c;得由驱动来区分不同的设备&#xff0c;怎么区别呢…

SEH异常之编译器原理探究(2)

_try_finally原理 无论try结构体中是什么代码&#xff0c;都会执行finally里面的代码 局部展开 当try里面没有异常&#xff0c;而是return、continue、break等语句时&#xff0c;就不会走_except_handle3这个函数&#xff0c;而是调用_local_unwind2进行展开 然后调用[ebx e…

鸿蒙OS开发问题:(ArkTS) 【解决中文乱码 string2Uint8Array、uint8Array2String】

在进行base64编码中&#xff0c;遇到中文如果不进行处理一定会出现乱码 let result1: string CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse((一二三四五六七八九十123)))LogUtils.i("result1 " result1);let result2: string CryptoJS.enc.Base64.par…

Java:抽象类相关

引言&#xff1a; 在Java编程语言中&#xff0c;抽象类是一种不能被实例化的重要类型&#xff0c;它为类的层次结构提供了一个基础框架。抽象类可以包含抽象方法和具体方法&#xff0c;它们通常用作其他类的父类或基类。本文将详细探讨Java中抽象类的概念、如何使用它们以及在设…

C++类基础5——拷贝构造函数,拷贝赋值运算符(复制构造函数,复制赋值运算符)

拷贝控制操作 当定义一个类时&#xff0c;我们显式地或隐式地指定在此类望的对象拷贝&#xff0c;移动、赋值和销毁时做什么。 一个类通定义五种特殊的成员函数来控制这些操作&#xff0c;包括&#xff1a;拷贝构造函数(copy consinuctor)、拷贝赋值运算符(copy-assignment op…

某国投集团知识竞赛活动方案

一、抽签分组办法 1.抽签&#xff1a;参赛队伍赛前进行抽签分组。 2.分组&#xff1a;全部报名参赛队伍按照抽签顺序分为4组&#xff0c;每组7支队伍进行预赛&#xff0c;9月16日上午1、2组进行初赛&#xff0c;9月16日下午3、4组进行初赛。每组决出的前三名进入决赛。 二、初…

【Frida】【Android】工具篇:ZenTracer

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

Leetcode刷题记录面试基础题day1(备战秋招)

hello&#xff0c;你好鸭&#xff0c;我是康康&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行!&#x1f4aa;&#x1f4aa;&#x1f4aa; 目前博客主要更新Java系列、数据库、项目案例、计算机基础等知识点。感谢你的阅读和…

P2802 回家

P2802 回家 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 虽然是普及-难度的题&#xff0c;但是感觉细节有很多。 细节&#xff1a; bfs第一次到 ( i , j ) (i, j) (i,j)&#xff0c;但是距离不一定是最小的 鼠标是一次性物品 血量到达 ( x x , y y ) (xx, yy) (xx,yy)为…

【二分图】【二分图最大匹配】LCP 04. 覆盖

作者推荐 视频算法专题 本文涉及知识点 二分图 二分图最大匹配 LeetCode LCP 04. 覆盖 你有一块棋盘&#xff0c;棋盘上有一些格子已经坏掉了。你还有无穷块大小为1 * 2的多米诺骨牌&#xff0c;你想把这些骨牌不重叠地覆盖在完好的格子上&#xff0c;请找出你最多能在棋盘…

探索C语言中的联合体和枚举:让处理数据更加得心应手

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;http://t.csdnimg.cn/Oytke 小新的主页&#xff1a;编程版小新-CSDN博客 C语言中有内置类型&#xff0c; 比如&…

JavaScript:快速入门

1. 数据类型 /** * 数据类型: number(包含整数、小数) * string&#xff08;字符串类型&#xff09; * boolean&#xff08;布尔类型&#xff09; * object&#xff08;对象类型&#xff09; * function&#xff08;函数类型&#xff09; …

Roxlabs代理服务:智能化数据采集的加速器

TOC 一、引言 在这个数据驱动的时代&#xff0c;无论是企业还是个人&#xff0c;对于准确、及时的信息获取都有着前所未有的需求。网络数据采集已成为洞察市场趋势、分析竞争对手动态、优化营销策略的关键手段。然而&#xff0c;面对全球范围内的网站和服务&#xff0c;如何高…

【美团笔试题汇总】2024-03-30-美团春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f…

使用python将pdf插入到docx中

from pdf2image import convert_from_path from docx import Document from docx.shared import Inches,Cm# 将PDF转换为图片 pages convert_from_path(4.pdf, 200) # 200是DPI&#xff0c;可以根据需要调整doc Document()# 计算图片在docx中应该显示的宽度 img_width Cm(2…

【文献分享】 机器学习 + 分子动力学 + 第一性原理计算 + 热力学性质(熔化温度 热导率 热膨胀系数)

分享一篇关于机器学习 分子动力学 第一性原理 熔化温度&#xff08;熔化温度 & 热导率 & 热膨胀系数&#xff09;的文章。 感谢论文的原作者&#xff01; 关键词&#xff1a; 1. Al−Li alloy 2. Neural network potential 3. Molecular dynamics 4. Thermal pr…