包含此页的版本:
不含此页的版本:
这些示例使用关闭播放器或 Unity 编辑器时写入日志的内存使用情况报告。要创建这些报告,请使用-log-memory-performance-stats命令行参数。要查找项目的日志文件,请按照日志文件页面上的说明进行作。
存储桶分配器保留内存块用于分配。每个块分为 16 KB 的小节。以下示例配置演示了为分配保留块的过程:
在此设置中,总块大小(Bucket Allocator Block Size)为 4 MB,分配粒度(Bucket Allocator Granularity)为 16 字节。它为其创建存储桶的第一个分配大小为 16 字节,第二个为 32 字节 (2 * 16),然后是 48 个字节、64 个字节、80 个字节、96 个字节、112 个字节和 128 个字节,总共 8 个存储桶(存储桶分配器 BucketCount)。
每个子部分包含不同数量的存储桶。要计算子部分中的存储桶数,请将子部分大小 (16 KB) 除以粒度大小。例如:
存储桶分配器为开发版本和发布版本生成不同的使用情况报告,因为在开发版本开发版本包括调试符号并启用分析器。更多信息
请参阅术语表每个分配都有一个额外的 40 字节标头。下图演示了 16 字节和 64 字节分配的开发版本和发布版本之间的区别:
标头是分配器在仅分配其 4 MB 中的 2 MB 后报告已满的原因:
[ALLOC_BUCKET]
Large Block size 4.0 MB
Used Block count 1
Peak Allocated bytes 2.0 MB
Failed Allocations. Bucket layout:
16B: 64 Subsections = 18724 buckets. Failed count: 3889
32B: 17 Subsections = 3868 buckets. Failed count: 169583
48B: 31 Subsections = 5771 buckets. Failed count: 39674
64B: 28 Subsections = 4411 buckets. Failed count: 9981
80B: 17 Subsections = 2321 buckets. Failed count: 14299
96B: 6 Subsections = 722 buckets. Failed count: 9384
112B: 44 Subsections = 4742 buckets. Failed count: 5909
128B: 49 Subsections = 4778 buckets. Failed count: 8715
在同一项目的发布版本中,分配器块大小就足够了:
[ALLOC_BUCKET]
Large Block size 4.0 MB
Used Block count 1
Peak Allocated bytes 3.3 MB
如果存储桶分配器已满,则分配将回退到另一个分配器。使用情况报告显示使用情况统计信息,包括失败的分配数。如果报表显示的失败计数呈线性增加,则失败分配可能是在计算帧时发生的,而不是负载。回退分配对场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表负载,但如果在计算帧时发生它们,它们可能会影响性能。
要防止这些回退分配,请增加块大小,并限制新的块大小以匹配帧的峰值使用量,而不是场景加载的峰值使用量。这可以防止块变得太大,以至于它保留了大量内存,而这些内存在运行时不可用。
提示:Profiler 分配器共享存储桶分配器的实例。您可以在 Profiler 共享存储桶分配器设置中自定义此共享实例。