# 专用服务器优化

> Provides information about optimizing the build with default and manual optimizations to reduce resource utilization.

专用服务器构建目标为联网应用程序执行优化。默认情况下，构建目标会自动应用一些优化，而其他优化是可选的，因为它们的影响取决于游戏的实现方式。

## 自动优化##automatic-optimizations

默认情况下，专用服务器构建目标执行以下优化：

* [停用音频子系统](#AudioSubsystem)
* [移除光照线程](#LightingThreads)
* [移除一些播放器循环回调](#PlayerLoopCallbacks)
* [移除仅限 GPU 的资源](#GpuOnlyAssets)

### 音频子系统##audio-subsystem

专用服务器构建目标会停用[音频](/engine/6000.0/manual/audio/overview.md)[子系统](/engine/6000.0/script-reference/unity-engine/subsystem.md)，因为构建在作为专用服务器运行时不需要音频支持。禁用音频子系统可减少 CPU 负载。

### 光照线程##lighting-threads

专用服务器构建目标会删除与光照相关的进程线程，因为无需在服务器构建中渲染光照。

### 播放器循环回调##player-loop-callbacks

专用服务器构建目标会禁用以下[播放器循环回调](/engine/6000.0/script-reference/unity-engine-low-level/player-loop.md)，因为服务器构建不需要这些回调。

* [`SendMouseEvents`](/engine/6000.0/script-reference/unity-engine-player-loop/pre-update/send-mouse-events.md)的播放器更新循环注册
* [`UpdateAllRenderers`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/update-all-renderers.md)的播放器更新循环注册
* [`PlayerUpdateCanvases`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/player-update-canvases.md)的播放器更新循环注册
* 所有音频回调（例如 [`UpdateAudio`](/engine/6000.0/script-reference/unity-engine-player-loop/post-late-update/update-audio.md)）的播放器更新循环注册
* 所有 UI 回调（例如 [`UIElementsUpdatePanels`](/engine/6000.0/script-reference/unity-engine-player-loop/pre-late-update/ui-elements-update-panels.md)）的播放器更新循环注册
* 所有输入回调（例如 [`UpdateInputManager`](/engine/6000.0/script-reference/unity-engine-player-loop/early-update/update-input-manager.md)）的播放器更新循环注册

### 仅限 GPU 的资源##gpu-only-assets

专用服务器构建目标会删除服务器不需要的纯 GPU 资源，例如纹理的纹理像素数据和网格顶点数据。构建目标会保留具有 CPU 读/写访问权限的资源以及[资源文件夹](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/scripting-assets/loading-resourcesat-runtime.md)中的资源。

在禁用 CPU 读/写访问权限的情况下导入的纹理和网格只能由 GPU 访问，而 CPU 无法访问。由于专用服务器构建目标不会初始化图形设备，因此无需包含此数据。排除此数据会降低可执行文件的内存使用量。

请参阅以下列表，详细了解专用服务器构建目标删除和保留的资产。

**删除**：

* 禁用了 CPU 读/写访问权限的纹理。
* 禁用了 CPU 读/写访问权限的网格的顶点数据。

**保留**：

* 启用了 CPU 读/写访问权限的纹理。
* 启用了 CPU 读/写访问权限的网格的顶点数据。
* 受保护[资源文件夹](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/scripting-assets/loading-resourcesat-runtime.md)中的资源。
* 纹理[元数据](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-metadata.md)（例如纹理大小值）。
* 即使禁用了 CPU 读/写权限，CPU 上运行的内部系统也需要的网格数据（例如[物理系统](/engine/6000.0/manual/physics-section.md)）。

**注意**：要了解有关 CPU 读/写访问权限的更多信息，请参阅 [Texture.isReadable](/engine/6000.0/script-reference/unity-engine/texture/is-readable.md) 和 [Mesh.isReadable](/engine/6000.0/script-reference/unity-engine/mesh/is-readable.md)。

## 其他优化##additional-optimizations

您还可以通过播放器设置 (Player Settings) 窗口中的 [Enable Dedicated Server Optimizations](/engine/6000.0/manual/platform-specific/dedicated-server/get-started/player-settings.md#Optimization) 属性应用其他优化。这些优化会删除**着色器**和**字体**等资产。但是，如果在游戏实现过程中引用了删除的资产，则应用这些优化可能会导致出现问题。

**删除的资源**：

* 着色器
* 字体

除了通过专用服务器构建目标应用的自动优化之外，还可以手动应用以下特定于实现过程的优化。

* 使用[条件编译](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/platform-dependent-compilation.md)可根据构建目标选择性地包含和排除代码。
* 通过类实现将特定于玩家的代码和特定于服务器的代码分开。
* 在服务器构建中删除 PlayerLoop 中的其他项。请参阅 [PlayerLoop](/engine/6000.0/script-reference/unity-engine-low-level/player-loop.md) 和 [PlayerLoopSystem](/engine/6000.0/script-reference/unity-engine-low-level/player-loop-system.md)。

## 其他资源##known-limitations

* [了解 Unity 中的优化](/engine/6000.0/manual/analysis/understanding-performance.md)
* [Unity UI 的优化技巧](https://unity.com/how-to/unity-ui-optimization-tips)
* [Unity 中性能优化的最佳实践](https://unity.com/how-to/advanced-programming-and-code-architecture)
