首页 > 其他分享 >【Addressable】Catalog文件大小优化

【Addressable】Catalog文件大小优化

时间:2024-06-20 15:55:25浏览次数:20  
标签:文件大小 文件 压缩 Catalog Addressable using

在 Unity 中使用 Addressables 系统时,Addressable Catalog 文件的大小可能会影响加载时间和性能。以下是一些降低 Addressable Catalog 文件大小的方法:

1. 减少冗余的地址标签

确保每个 Addressable 资产只使用必要的标签。避免给每个资产附加过多的标签,因为标签会增加 Catalog 文件的大小。

2. 减少资源包数量

尽量减少资源包(Asset Bundles)的数量。更多的资源包会导致更多的元数据存储在 Catalog 中,从而增加其大小。合并小的资源包到较大的资源包中可以减小 Catalog 文件的大小。

3. 使用 Addressable 的分组功能

将相关的 Addressable 资产分组在一起。通过合并同一组中的资源包,Catalog 文件可以更紧凑。配置每个组的打包模式时,选择“Pack Together”而不是“Pack Separately”可以减少 Catalog 文件大小。

4. 清理未使用的地址和标签

定期清理未使用的地址和标签。未使用的地址和标签会增加 Catalog 文件的大小而没有实际的用途。

5. 优化资源路径

使用简洁且有意义的路径命名地址(Addressable Paths)。路径越长,Catalog 文件越大。尽量使用短路径并避免不必要的嵌套。

6. 调整压缩设置

Addressable 资源包支持压缩,Catalog 文件本身也可以通过压缩减小其大小。检查并调整资源包的压缩设置。

7. 分布式 Catalog 文件

将 Catalog 文件拆分为多个部分并根据需要加载。Unity Addressables 支持加载分布式 Catalog 文件,这样可以减少初始加载的 Catalog 文件大小。

---------------------------------------------------------------------------------------------------------------------------------------
上面部分是可以有效减小Catalog文件大小,减低初始化读取配置时间
但是可能会对我们原来的功能设计产生或多或少的影响
通过对Catalog文件里面的数据解析,发现里面占比比较大的内容

"m_ExtraDataString": "H4sIAAAAAAAACuy9264lyZIc5tALf4Pg82iQGZmRmSGAD+..."

去找了一下构建代码里面相关的这块数据生成

//转换存储
m_ExtraDataString = Convert.ToBase64String(extraDataList.ToArray());

//读取存储数据
var extraData = Convert.FromBase64String(m_ExtraDataString);

它是将 byte 数组使用 Base64 编码转换为字符串存储,再反编译回 byte 数组。(Base64 编码是一种将二进制数据表示为 ASCII 字符串的方法,方便储存和传输)

我先将这里注释了,发现生成出来的m_ExtraDataString为空,Catalog文件的确小了很多
就只能想办法去减小这里生成出来的数据

压缩数据:在将 byte 数组转换为 Base64 字符串之前,可以使用压缩算法来减小数据大小。常用的压缩算法包括 GZip 和 Deflate。

using System;
using System.IO;
using System.IO.Compression;

public class ByteArrayToCompressedBase64
{
    public static string ConvertByteArrayToCompressedBase64(byte[] byteArray)
    {
        // 使用内存流和 GZipStream 进行压缩
        using (var output = new MemoryStream())
        {
            using (var gzip = new GZipStream(output, CompressionLevel.Optimal))
            {
                gzip.Write(byteArray, 0, byteArray.Length);
            }
            return Convert.ToBase64String(output.ToArray());
        }
    }
public static byte[] ConvertCompressedBase64ToByteArray(string base64String)
    {
        // 将 Base64 字符串解码为压缩后的 byte 数组
        byte[] compressedData = Convert.FromBase64String(base64String);

        // 使用内存流和 GZipStream 进行解压缩
        using (var input = new MemoryStream(compressedData))
        {
            using (var output = new MemoryStream())
            {
                using (var gzip = new GZipStream(input, CompressionMode.Decompress))
                {
                    gzip.CopyTo(output);
                }
                return output.ToArray();
            }
        }
    }
}
View Code

使用上面的压缩处理,我将Catalog文件里面其他相似数据转换都做了处理
Catalog文件大小变化 (1569个Bundle)
压缩前:json文件(2431 KB)

压缩后:json文件 (520 KB)
这个压缩率还是很可观的,加载使用暂时没有出现问题,完美!!!
(注意,资源构建和资源加载工程分开的,要保持上面压缩代码同步都修改掉,不然可能会造成压缩数据无法正常加载!!)

 

标签:文件大小,文件,压缩,Catalog,Addressable,using
From: https://www.cnblogs.com/lovewaits/p/18258831

相关文章

  • C++数据格式化2 - 将文件大小转换为人类易读的格式
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词C++数据格式化字符串处理std::string文件大小跨平台2.strfmt.h#pragmaonce#include<string>#include<cstdint>#include<sstream>#include<iomanip>namespacecutl{......
  • unitycatalog datagrics 开源的data&ai 多模catalog
    unitycatalogdatagrics开源的data&ai多模catalog包含的特性支持任意格式、引擎、资产的多摸接口 支持包含了deltalake,iceberg,uniform,paquert,csv。。。等格式,超越表,支持非结构化数据以及ai资产,插件化的架构,可以支持hms以及icebergrestcatalog以及其他插件(比如ai),与delt......
  • 数据库-Duckdb-catalog和schema
    创建数据库1.会有一个或者两个文件.duckbd.wal 2.用户的数据库名称--databasename-database_oid数据库对象表的全限定名可表示为:Catalog名.Schema名.表名01.DuckDB'stwointernaldatabaseschemanames,systemandtemp.有两个内部的数据schema_nameT......
  • 查看磁盘使用空间和文件大小
    SpaceSniffer则适用于windows查看某路径下的文件大小,用矩形面积大小来表示文件大小占用,并且还可以一次显示多个文件层级的大小。Filelight磁盘占用查看器以多层同心圆示意图显示电脑磁盘使用情况,适用于windows、linux在linux上查看硬盘的使用情况:df-h.参数-h表示......
  • openGauss 在XFS文件系统中-使用du命令查询数据文件大小大于文件实际大小
    在XFS文件系统中,使用du命令查询数据文件大小大于文件实际大小问题现象在数据库使用过程中,通过如下du命令查询数据文件大小,查询结果大于文件实际的大小。du-shfile原因分析XFS文件系统有预分配机制,预分配的大小由参数allocsize确定。du命令显示的文件大小包括该预分配的磁......
  • jumpserver windows 上传文件大小限制配置
    jumpserverYoudonothavepermissiontouploadthisfile.Ifyourequireaccess,pleasecheckyoursystemsettings,orcheckwithyoursystemadministratorif["$SECRET_KEY"=""];thenSECRET_KEY=`cat/dev/urandom|tr-dcA-Za-z0......
  • dremio CatalogMaintenanceService 服务简单说明
    说明此服务是从25.0开始包含的,同时在releasenote中也有说明,以下主要说明下内部实现release信息如下,具体就不翻译了,主要是添加了一个每个任务进行每个view最大保留50个历史信息Addeddailycatalogmaintenancetaskstotrimhistoryofviewstoamaximumof50......
  • openGauss VACUUM-FULL一张表后-表文件大小无变化
    VACUUMFULL一张表后,表文件大小无变化问题现象使用VACUUMFULL命令对一张表进行清理,清理完成后表大小和清理前一样大。原因分析假定该表的名称为table_name,对于该现象可能有以下两种原因:table_name表本身没有delete过数据,使用VACUUMFULLtable_name后无需清理delete的数据......
  • Golang:go-humanize将文件大小转换成Kb、Mb、Gb适合人类阅读的单位
    Golang:go-humanize将文件大小转换成Kb、Mb、Gb适合人类阅读的单位原创 吃个大西瓜 CodingBigTree 2024-05-0408:30 云南​最近去了昆明的教场中路体验了满屏蓝花楹,感受到了梦幻般的世界,随手拍了一张图,分享给大家,有时间可以去一趟,体验一次,顺便说一下,美女很多喔 ......
  • Catalog
    Problem(P):P2508[HAOI2008]圆上的整点https://www.cnblogs.com/mfc007/p/17643618.htmlUVA1073GlenbowMuseumhttps://www.cnblogs.com/mfc007/p/17643619.html(S1)最小斯坦纳树https://www.cnblogs.com/mfc007/p/17643622.htmlUVA11400LightingSystemDesignhttps......