Unity的Resources.Load()在load同样的资源内存消耗是怎样的?

本文通过实验展示了在Unity中重复加载相同纹理资源时的内存消耗情况。结果显示,Unity能够智能地仅占用一份资源的内存空间,即使多次加载同一资源也不会增加额外的内存负担。这得益于Unity内部对资源使用的共享指针机制。
部署运行你感兴趣的模型镜像

题目中的问题,关心的朋友都是因为在使用的过程中突然想起的,回答这个问题只要用一小段代码反复load一张同样的图在profile里看就可以得到答案。

void TestSameTextureLoad() {

        for (int i = 0; i < 30; i++) {

            textureList.Add((Texture2D)Resources.Load("test"));

            texturePtr = (Texture2D)Resources.Load("test");

        }

    }

结果是:

unity只消耗一张图的内存,也就是同样的资源,不会消耗多份资源。


这个结论也是3D引擎内部为什么对资源使用共享指针的一个说明:资源是共享的,每个资源都有一个引用值,当有一个指针引用到它,这个指针就加一。反之,减去一。当引用值是0的时候,引擎就可以释放这个资源占用的内存。对于Unity来说,资源的引用值归0后,需要用Resources.UnloadUnusedAssets()来促使引擎释放所有引用值为0的资源。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Unity中,`Resources.Load` 是一种常见的用于加载资源的方法,适用于多种资源类型,包括 `.dat` 文件。`.dat` 文件通常用于存储二进制数据或文本数据,可以通过 `Resources.Load` 加载为 `TextAsset` 类型,然后根据其内容进行处理。 要使用 `Resources.Load` 加载 `.dat` 文件,首先需要确保文件位于 `Assets/Resources` 文件夹或其子目录中。然后,可以通过以下代码加载文件: ```csharp TextAsset datFile = Resources.Load<TextAsset>("Path/To/File"); ``` 其中 `"Path/To/File"` 是相对于 `Resources` 文件夹的路径,不需要包含文件扩展名 `.dat`。例如,如果文件位于 `Assets/Resources/Data` 文件夹中,并且名为 `data.dat`,则代码应为: ```csharp TextAsset datFile = Resources.Load<TextAsset>("Data/data"); ``` 加载完成后,可以通过 `datFile.text` 获取文件的文本内容,或者通过 `datFile.bytes` 获取其二进制数据 [^4]。 例如,以下代码演示了如何加载并读取 `.dat` 文件的文本内容: ```csharp using UnityEngine; public class LoadDatFile : MonoBehaviour { private void Start() { TextAsset datFile = Resources.Load<TextAsset>("Data/data"); if (datFile != null) { string content = datFile.text; Debug.Log("File content: " + content); } else { Debug.LogError("Failed to load .dat file."); } } } ``` 如果 `.dat` 文件存储的是二进制数据,则可以使用 `datFile.bytes` 来访问数据,并根据需要进行解析。 需要注意的是,`Resources.Load` 是同步加载方法,适用于小型资源的加载。如果需要加载较大的资源或需要异步加载以避免阻塞主线程,可以考虑使用 `ResourceRequest` 或 `Addressables` 等更高级的资源加载方式 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值