Python一键清理Windows内存

最近电脑越来越卡了,8G 内存开几个 Chrome 标签页就飙到 80%,看着任务管理器里那些“内存大户”就头疼。虽然 Windows 有自己的内存管理机制,但有时候它就是不太“积极”,非得等到内存快爆了才开始回收。

网上找了下,发现 Windows 其实有个 API 可以主动清理进程的内存工作集(Working Set),简单说就是把进程不常用的内存数据挪到虚拟内存里,腾出物理内存给其他程序用。效果嘛,就像给系统来了一次“内存瘦身”,各个进程的内存占用瞬间下降,但程序又不会关闭。

核心原理

关键就是 Windows 的 EmptyWorkingSet 这个 API,它会清空指定进程的工作集。配合 psutil 库遍历所有进程,就能实现一键全局清理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import ctypes
from ctypes import wintypes
import psutil

# 加载系统 API
psapi = ctypes.WinDLL('psapi', use_last_error=True)
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

OpenProcess = kernel32.OpenProcess
OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
OpenProcess.restype = wintypes.HANDLE

EmptyWorkingSet = psapi.EmptyWorkingSet
EmptyWorkingSet.argtypes = [wintypes.HANDLE]
EmptyWorkingSet.restype = wintypes.BOOL

CloseHandle = kernel32.CloseHandle
CloseHandle.argtypes = [wintypes.HANDLE]
CloseHandle.restype = wintypes.BOOL

# ======================
# 【关键】必须用这个权限才能清理内存
# ======================
PROCESS_ALL_ACCESS = 0x001F0FFF


def clean_process(pid):
try:
handle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
if handle and handle != 0:
EmptyWorkingSet(handle)
CloseHandle(handle)
return True
except:
pass
return False


# 一键清理所有非系统进程
print("=== 一键全局内存清理 ===")
print("效果:所有软件内存瞬间下降,不关闭程序\n")

success = 0

for proc in psutil.process_iter(['pid', 'name']):
try:
pid = proc.pid
name = proc.name()

# 跳过系统关键进程
if pid < 10:
continue

# 清理
if clean_process(pid):
success += 1
print(f"✅ 已清理: {name} (PID:{pid})")

except:
continue

print(f"\n🎉 清理完成!成功优化 {success} 个进程")
print("👉 打开任务管理器查看内存变化!")

几个要注意的点

权限很重要PROCESS_ALL_ACCESS 这个权限值不能写错,否则会清理失败。最开始我就试过用较低权限,结果什么也清不了。

不要动系统进程:PID 小于 10 的基本都是系统关键进程,动它们可能会出问题,所以代码里直接跳过了。

效果因人而异:清理后进程内存占用确实会下降,但如果程序马上又要用那些数据,Windows 会把它们从虚拟内存读回来,内存占用又上去了。所以这只是个“临时救急”的方案,真正的解决办法还是…加内存条。

怎么用?

先装依赖:

1
pip install psutil

然后直接运行脚本就行。建议在内存占用高的时候试试,效果会比较明显。你可以一边开着任务管理器一边跑,看着内存占用往下掉还挺解压的。

不过话说回来,这个脚本也就是治标不治本。如果电脑经常内存不足,还是老老实实加根内存条比较靠谱。这个脚本就当是个小玩具,偶尔拿来给系统“透透气”也挺好的。