一开始我以为python会自带一些这方面的函数或者方法但是我发现我错了
所以我决定自己再次写一个帮助python减小内存占用的。在这之前我发现
百度上的方法基本都是在代码中利用回收变量的方法,就意思说哪个变量调
用的时候让他占用非常大,他就会把这个变量回收掉。但是你在写非常多的代
码时,这种方法就行不通了,下面新的方法奉上.
首先我们需要找到与进程相关的系统Dll,不多说内行的人马上就会想到
kernel
没错,我用这个软件分析dll里面的函数,就发现了
import ctypes
dll = ctypes.windll.LoadLibrary('kernel32.dll')首先导入c语言的支持库。加载kernel32.dll
from subprocess import check_output
导入cmd执行结果的输出,这个主要是来获取指定进程的pid~
import psutil
pl = psutil.pids()for pid in pl:if psutil.Process(pid).name()=="进程名":
dll.SetProcessWorkingSetSize(pid,-1,-1)print("内存优化成功~")break
后面的两个参数是指虚拟内存的大小,最大和最小,mini & max你们可以自己尝试这两个参数我反正用的这俩~
全部代码:
import ctypes
dll = ctypes.windll.LoadLibrary('kernel32.dll')from subprocess import check_output
import psutil
pl = psutil.pids()for pid in pl:if psutil.Process(pid).name()=="cmd.exe":
dll.SetProcessWorkingSetSize(pid,-1,-1)print("内存优化成功~")break以上是单独进程优化
import ctypes, time
import psutil
before = psutil.virtual_memory().percent
#print(before) #释放前的占用百分比def 内存释放():
dll = ctypes.windll.LoadLibrary('kernel32.dll')from subprocess import check_output
pl = psutil.pids()for pid in pl:
dll.SetProcessWorkingSetSize(dll.OpenProcess(2035711,0, pid),-1,-1)def 优化内存():for i inrange(0,30):
time.sleep(0.2)
内存释放()
dll = ctypes.windll.LoadLibrary('kernel32.dll')
dll.SetProcessShutdownParameters(0,0)
优化内存()
after = psutil.virtual_memory().percent
#print(after) #释放后的占用百分比
answer =float(before)-float(after)#print(str(round(answer, 3)) + "%") #释放的百分比
pc_mem =psutil.virtual_memory()
div_gb_factor =(1024.0**3)print("为您释放了:"+str(round(float(pc_mem.total/div_gb_factor)*float(answer /100),3))+"G")
这个是全部进程优化代码~
代码任何问题联系我QQ
2076966127


发布评论