# 自定义分配器

> Customize the allocator types with the Editor or command line.

> \*\*注意：\*\*并非所有平台都支持这项功能。请参阅[针对具体平台的](/engine/6000.0/manual/platform-specific.md)文档以了解更多信息。

要自定义分配器设置，可以通过[编辑器用户界面 (Editor UI)](#use-the-editor) 编辑可配置的值，也可以将它们作为[命令行参数](#use-command-line-arguments)提供。

## 使用编辑器

1. 选择*项目设置 (Project Settings)* > *内存设置 (Memory Settings)*。
2. 选择要编辑的值旁边的锁定图标。


**项目设置 (Project Settings) > 内存设置 (Memory Settings)，显示对播放器内存设置的选择:**
![](/api/media?file=/engine/6000.0/media/images/Memory_Settings.png)

> **注意**：请参阅前面的各个分配器部分，查看通过编辑器用户界面 (Editor UI) 可自定义的字段。

## 使用命令行参数

要查找要更改的分配器参数的名称，请查看编辑器和播放器在启动时打印的分配器设置列表。例如，要更改主堆分配器的代码块大小，请使用 `-memorysetup-main-allocator-block-size=<new_value>`

分配器参数名称及其默认值：

| **分配器**     |                   |                                        | **描述**                                               | **参数名称**                                                   | **默认值**                             |
| ----------- | ----------------- | -------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------- |
| 主分配器        |                   |                                        | Unity 进行大多数分配所用的分配器。                                 |                                                            |                                     |
|             | 主分配器              |                                        | Unity 进行大多数分配所用的主分配器。                                |                                                            |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 主线程代码块大小          | 专用主线程分配器的代码块大小。                        | `memorysetup-main-allocator-block-size`              | `16777216`                                                 |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 共享线程代码块大小         | 共享线程分配器的代码块大小。                         | `memorysetup-thread-allocator-block-size`            | `16777216`                                                 |                                     |
|             | Gfx 分配器           |                                        | Unity 进行与 Gfx 系统相关的 CPU 分配所用的分配器。                    |                                                            |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 主线程代码块大小          | 专用主线程 Gfx 分配器的代码块大小。                   | `memorysetup-gfx-main-allocator-block-size`          | `16777216`                                                 |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 共享线程代码块大小         | 共享线程 Gfx 分配器的代码块大小。                    | `memorysetup-gfx-thread-allocator-block-size`        | `16777216`                                                 |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
| 其他分配器       |                   |                                        |                                                      |                                                            |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 文件缓存代码块大小         | 文件缓存有自己的分配器，以避免碎片化。这是其代码块大小。           | `memorysetup-cache-allocator-block-size`             | `4194304`                                                  |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 类型树代码块大小          | 类型树有自己的分配器，以避免因许多小分配而导致碎片化。这是其代码块大小。   | `memorysetup-typetree-allocator-block-size`          | `2097152`                                                  |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
| 共享存储桶分配器    |                   | 在主分配器之间共享的存储桶分配器。                      |                                                      |                                                            |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器粒度          | 共享分配器中存储桶的步骤大小。                        | `memorysetup-bucket-allocator-granularity`           | `16`                                                       |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器存储桶数量       | 存储桶大小的数量。                              | `memorysetup-bucket-allocator-bucket-count`          | `8`                                                        |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器代码块大小       | 用于存储桶的内存代码块大小。                         | `memorysetup-bucket-allocator-block-size`            | `Editor: 8388608``Player: 4194304`                         |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器代码块计数       | 要分配的最大代码块数。                            | `memorysetup-bucket-allocator-block-count`           | `Editor: 8``Player: 1`                                     |                                     |
| 高速性能线程临时分配器 |                   |                                        | 用于处理非常短暂的分配的线程本地存储 (TLS) 分配器。                        |                                                            |                                     |
|             | 主线程代码块大小          |                                        | 主线程堆栈的初始大小。                                          | `memorysetup-temp-allocator-size-main`                     | `Editor: 16777216``Player: 4194304` |
|             | 作业工作程序代码块大小       |                                        | Unity 作业系统中每个作业工作程序的大小。                              | `memorysetup-temp-allocator-size-job-worker`               | `E262144`                           |
|             | 后台作业工作程序代码块大小     |                                        | 每个后台工作程序的大小。                                         | `memorysetup-temp-allocator-size-background-worker`        | `32768`                             |
|             | 预加载代码块大小          |                                        | 预加载管理器堆栈大小。                                          | `memorysetup-temp-allocator-size-preload-manager`          | `Editor: 33554432``Player: 262144`  |
|             | 音频工作程序代码块大小       |                                        | 每个音频工作程序线程的堆栈大小。                                     | `memorysetup-temp-allocator-size-audio-worker`             | `65536`                             |
|             | 云工作程序代码块大小        |                                        | 云工作程序线程堆栈大小。                                         | `memorysetup-temp-allocator-size-cloud-worker`             | `32768`                             |
|             | Gfx 线程代码块大小       |                                        | 主渲染线程堆栈大小。                                           | `memorysetup-temp-allocator-size-gfx`                      | `262144`                            |
|             | GI 烘焙代码块大小        |                                        | 每个 GI 工作程序线程的堆栈大小。                                   | `memorysetup-temp-allocator-size-gi-baking-worker`         | `262144`                            |
|             | 导航网格工作程序代码块大小     |                                        | 导航网格工作程序线程堆栈大小。                                      | `memorysetup-temp-allocator-size-nav-mesh-worker`          | `65536`                             |
| 高速线程共享临时分配器 |                   |                                        | 用于在线程之间共享的短生命周期分配的快速线性分配器。                           |                                                            |                                     |
|             | 作业分配器代码块大小        |                                        | Unity 主要用于作业工作程序线程的循环线性线程分配器。                        | `memorysetup-job-temp-allocator-block-size`                | `2097152`                           |
|             | 后台作业分配器代码块大小      |                                        | 允许更长时间分配的后台工作程序的线性分配器。                               | `memorysetup-job-temp-allocator-block-size-background`     | `21048576`                          |
|             | 低内存平台上的作业分配器代码块大小 |                                        | 内存小于 2GB 的平台会将此大小用于作业工作程序和后台作业。                      | `memorysetup-job-temp-allocator-reduction-small-platforms` | `262144`                            |
| 性能分析器分配器    |                   |                                        | Unity 专用于性能分析器的分配器，因此它们不会干扰应用程序的分配模式。                |                                                            |                                     |
|             | 性能分析器代码块大小        |                                        | 性能分析器主要部分的代码块大小。                                     | `memorysetup-profiler-allocator-block-size`                | `16777216`                          |
|             | 编辑器性能分析器代码块大小     |                                        | 性能分析器的编辑器部分的代码块大小。这在玩家身上是不存在的。                       | `memorysetup-profiler-editor-allocator-block-size`         | `1048576`                           |
|             | 共享性能分析器存储桶分配器     |                                        | 性能分析器和编辑器性能分析器分配器的共享存储桶分配器。在低内存平台上不存在。               |                                                            |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器粒度          | 共享分配器中存储桶的步骤大小。                        | `memorysetup-profiler-bucket-allocator-granularity`  | `16`                                                       |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器存储桶数量       | 存储桶大小的数量。例如，如果值为 4，则大小为 16、32、48 和 64。 | `memorysetup-profiler-bucket-allocator-bucket-count` | `8`                                                        |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器代码块大小       | 用于存储桶的内存代码块大小。                         | `memorysetup-profiler-bucket-allocator-block-size`   | `Editor: 33554432``Player: 4194304`                        |                                     |
|             |                   |                                        |                                                      |                                                            |                                     |
|             | 存储桶分配器代码块计数       | 要分配的最大代码块数。                            | `memorysetup-profiler-bucket-allocator-block-count`  | `Editor: 8``Player: 1`                                     |                                     |

> **提示**：为确保设置能够提高性能，请在进行更改之前和之后对应用程序进行性能分析。有关更多信息，请参阅[性能分析器概述页面](/engine/6000.0/manual/analysis/profiler.md)和[性能分析器分析器](https://docs.unity3d.com/Packages/com.unity.performance.profile-analyzer@latest)的包文档。性能分析器分析器支持多帧比较，这对于突出显示分配器性能差异特别有用。还可以检查内存使用情况报告。关闭播放器或编辑器时，日志中会显示这些字段。要查找日志文件，请按照[日志文件页面](/engine/6000.0/manual/scripting/debugging-and-diagnostics/log-files.md)上的说明操作。

## 存储和读取设置

Unity 将分配器设置存储在 `MemorySettings.asset` 中，这会在构建时使用修改后的设置填充 `boot.config` 文件。这意味着新设置将在每次构建时生效。

在编辑器中，`boot.config` 位于 `ProjectSettings` 文件夹中。每次 Unity 导入或更改 `MemorySettings.asset` 时其都会更新。编辑器的新值仅在下次编辑器启动时生效。
