Windows 内存压缩:禁用与启用完全指南

2020-05-20 Windows

Windows 10/11 引入了一项重要的内存管理技术——内存压缩(Memory Compression)。它可以在物理内存不足时,通过压缩内存中的数据来减少对硬盘虚拟内存的依赖,从而提高系统响应速度。

本文将深入讲解内存压缩的工作原理,并介绍如何查看、启用和禁用此功能。

什么是内存压缩?

基本原理

传统上,当物理内存(RAM)不足时,Windows 会把不常用的内存页面写入硬盘上的页面文件(pagefile.sys)。这个过程称为"分页"(Paging),涉及磁盘 I/O,速度很慢。

内存压缩改变了这一策略:在将数据写入硬盘之前,Windows 会先尝试压缩这些内存页面。压缩后的数据占用更少的内存空间,因此可以留在物理内存中,而不是写入硬盘。

关键概念对比:

方式 CPU操作 I/O操作 速度 影响
无压缩 - 写入硬盘 慢(毫秒级) 高延迟,耗电
内存压缩 压缩/解压 不写硬盘 快(微秒级) 低延迟,省电

工作原理图解

传统方式(无内存压缩):
内存不足 → 页面写入硬盘(pagefile.sys) → 需要时再从硬盘读回 → 大量I/O

内存压缩方式:
内存不足 → 压缩内存页面 → 保留在物理内存 → 需要时解压 → 无I/O
        ↓
    如果压缩后依然不足 → 再写入硬盘(pagefile.sys)

性能影响

内存压缩的优点:

  • 减少磁盘 I/O,延长 SSD 寿命
  • 加快内存数据访问速度
  • 在内存有限的设备上(如 4GB/8GB RAM)效果显著
  • 降低系统延迟和功耗

内存压缩的缺点:

  • 占用 CPU 资源进行压缩/解压
  • 在高端 CPU + 大内存的机器上,压缩反而增加开销(不必要)
  • 可能导致某些场景下的 CPU 使用率升高

如何查看内存压缩状态

方法一:使用任务管理器

  1. 按 Ctrl + Shift + Esc 打开任务管理器
  2. 切换到 "性能" 选项卡
  3. 点击左侧的 "内存"
  4. 在右下角查看内存使用情况

在 Windows 10 2004 及以上版本中:

  • 如果看到 "已压缩" 信息,说明内存压缩已启用
  • 显示如"已压缩 123 MB"表示当前压缩的数据量

方法二:使用 PowerShell(最详细)

以管理员身份打开 Windows PowerShell,执行以下命令:

Get-MMAgent

输出示例:

ApplicationPreLaunch         : True
ApplicationPreLaunchEnable   : True
MaxOperationAPIFiles          : 67108864
MemoryCompression            : True
MemoryCompressionEnable      : True
OperationAPI                 : True
OperationAPIEnable           : True
PageCombining               : True
PageCombiningEnable         : True
▶ PrefetchParameters
▶ ServiceLogonParameters

重点关注这两个值:

  • MemoryCompression:当前状态(True = 启用)
  • MemoryCompressionEnable:启用状态(True = 已启用)

方法三:使用资源监视器

  1. 按 Win + R,输入 resmon 回车
  2. 切换到 "内存" 选项卡
  3. 查看图表中的"压缩内存"部分

方法四:查看性能计数器

在 PowerShell 中执行:

Get-Counter "\Memory\Compressed Page Count"

返回当前被压缩的页面数量。

如何启用内存压缩

方法一:使用 PowerShell(推荐)

  1. 以管理员身份打开 Windows PowerShell
  2. 执行以下命令启用内存压缩:
Enable-MMAgent -MemoryCompression
  1. 验证状态:
Get-MMAgent
  1. 重启电脑使设置生效

方法二:通过命令行

以管理员身份打开命令提示符:

powershell -command "Enable-MMAgent -MemoryCompression"

然后重启电脑。

如何禁用内存压缩

方法一:使用 PowerShell(推荐)

  1. 以管理员身份打开 Windows PowerShell
  2. 执行以下命令禁用内存压缩:
Disable-MMAgent -MemoryCompression
  1. 验证状态:
Get-MMAgent

确认 MemoryCompression 显示为 False

  1. 重启电脑使设置生效

方法二:使用命令提示符

以管理员身份打开命令提示符:

powershell -command "Disable-MMAgent -MemoryCompression"

重启电脑。

方法三:通过注册表(高级)

如果 PowerShell 命令无效或不可用,可以手动修改注册表:

  1. 按 Win + R,输入 regedit,回车打开注册表编辑器
  2. 导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
  1. 在右侧空白处右键,新建 "DWORD (32位)值"

  2. 命名为:DisableCompression

  3. 双击 DisableCompression,设置数值数据:

    • 1 = 禁用内存压缩
    • 0 = 启用内存压缩
  4. 关闭注册表编辑器

  5. 重启电脑

方法四:使用注册表脚本

创建并运行以下 .reg 文件来禁用内存压缩:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"DisableCompression"=dword:00000001

保存为 disable-compression.reg,双击运行,选择"是",然后重启电脑。

要重新启用,将 00000001 改为 00000000,或者直接删除 DisableCompression 键值。

禁用后如何确认生效

禁用内存压缩并重启后,使用以下方法确认:

1. PowerShell 验证

Get-MMAgent | Select-Object MemoryCompression

返回 False 表示已禁用。

2. 任务管理器验证

打开任务管理器 → 性能 → 内存:

  • 如果只显示"已使用"和"可用",没有"已压缩"项,说明内存压缩已禁用
  • 注意:新版本 Windows 可能仍会显示"已压缩 0 MB",只要值为 0 即可

3. 使用 Process Monitor 验证

如果需要更深入的确认,可以使用 Process Monitor(来自 Sysinternals)观察系统是否还有压缩操作。

什么时候应该禁用内存压缩?

推荐禁用的场景

场景 原因 收益
16GB+ 大内存 很少需要压缩 节省 CPU 开销
高性能需求(游戏、渲染) 减少 CPU 干扰 略微提升帧率
CPU 性能较弱(老电脑) 压缩加重 CPU 负担 反之可能更卡
正在做 CPU 基准测试 消除干扰因素 测试结果更准确

推荐保留的场景

场景 原因
4GB/8GB 小内存 压缩能显著减少磁盘交换
SSD 空间不足 减少 pagefile.sys 写入,延长寿命
笔记本省电需求 减少磁盘 I/O 可省电
普通办公使用 默认设置已经最优

性能对比测试

以下是在 8GB 内存机器上运行多个 Chrome 标签页时的对比:

指标 启用压缩 禁用压缩
内存使用率 85% 92%
CPU 额外开销 1-3% 0%
磁盘 I/O 低 高
系统响应速度 流畅 偶尔卡顿
多任务切换 迅速 有延迟

结论:对于 8GB 内存的机器,建议保持启用。

常见问题

Q1: 禁用内存压缩会影响系统稳定性吗?

A: 不会。禁用内存压缩只是回到传统的内存管理方式,系统依然稳定运行。

Q2: 如何快速在启用和禁用之间切换?

A: 可以用批处理脚本配合管理员权限运行。创建两个 .bat 文件:

启用压缩.bat:

@echo off
powershell -command "Enable-MMAgent -MemoryCompression"
shutdown /r /t 5

禁用压缩.bat:

@echo off
powershell -command "Disable-MMAgent -MemoryCompression"
shutdown /r /t 5

Q3: 内存压缩和虚拟内存(页面文件)有什么关系?

A: 内存压缩是减少对虚拟内存依赖的手段。即使启用了压缩,页面文件仍然存在并发挥作用。压缩后的内存如果依然超过物理内存容量,数据仍会被写入页面文件。

Q4: 禁用压缩后,页面文件会变大吗?

A: 可能会,因为原本可以压缩保留的数据现在直接写入页面文件,导致页面文件使用量增加。

Q5: 在 Windows 11 中仍然适用吗?

A: 是的。Windows 11 继承了相同的内存压缩功能,本文的 PowerShell 命令和注册表方法完全适用于 Windows 11。

总结

  • 内存压缩是 Windows 10/11 的默认开启的内存优化技术
  • 通过压缩内存数据减少磁盘 I/O,提高系统响应速度
  • 使用 Get-MMAgent 查看状态,Enable-MMAgent/Disable-MMAgent 控制开关
  • 小内存(4GB-8GB)建议保留,大内存(16GB+)且追求极致性能时可以考虑禁用
  • 修改后需要重启生效

根据你的硬件配置和使用场景,合理选择是否启用内存压缩,以获得最佳的系统性能体验。