用Python做了个解压的内存加速球

写在前面

安全管家助手什么的上总会带一个内存加速球,有关掉进程以及内存清理的功能。虽然本质上,内存清理只是个幌子实际没啥作用,但是当你深度清理之后,肉眼可见的内存下降确实很解压。不过每次都得打开安全软件才能享受解压的快感实在是有些买椟还珠了,所以就想尝试一下自己写个玩玩。

内存清理

这里我使用python来编写。

搜索了一下,我确定了两个方案,一个是通过windows自带的内存回收机制清理,另一个是通过windows提供的一个APIEmptyWorkingSet清理,下面我们就来对比一下。

windows自带的内存回收机制

通过申请大量的内存来触发windows的内存回收机制,从而清理内存。

import psutil
import ctypes
mem = psutil.virtual_memory()
size = mem.total // 2
buffer = ctypes.create_string_buffer(size)

del buffer

这里通过psutil获取到内存总数,并且通过ctypes库来创建了一个一半总数的缓冲区,随后立马删掉。

但是,这样会造成临时的卡顿,并且肉眼可见的内存上涨。而且清理的不干净。果断放弃这个方案,一点都不顺畅。

EmptyWorkingSet

EmptyWorkingSet是windows的一个API,它用来清空指定进程的内存中的工作集。将该程序所用的物理内存定义为脏页并转移到磁盘上的内存交换文件上,清空该进程占用的物理内存,当进程再次需要时会再次从外存进行加载。那么加载的过程中可能会导致临时的卡顿。

市面上的加速球大多用的都应该是这个技术

通过psutil库,以及搭配win32相关的库,实现起来也很方便

import win32api
import win32con
import win32process
import psutil

for pid in psutil.pids():
    try:
        handle =  win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
        win32process.SetProcessWorkingSetSize(handle, -1, -1)
        win32api.EmptyWorkingSet(handle)

    except Exception:
        continue

而经过与某管家进行对比,发现效果大差不大,他们可能做了一些内存整理的优化。

进程终止

杀死进程就更简单了,这里为了避免出问题,我只保留他们的父进程,依旧是通过psutil来实现

import psutil

pid_set = set()
processes = []
# 只遍历正在运行的进程
for pid in psutil.pids():
    if pid in pid_set:
        continue
    try:
        proc = psutil.Process(pid)
    except psutil.NoSuchProcess:
        continue
    # 只处理父进程
    proc_p = proc.parent()
    if proc_p is not None:
        proc = proc_p
        if proc.pid in pid_set:
            continue

    pid_set.add(proc.pid)

    # 生成进程信息
    process_info = proc.as_dict(attrs=['pid', 'name', 'username', 'status', 'memory_info'])
    process.append(process_info)

而杀死进程则是通过如下代码实现,pid就是指定进程的pid

psutil.Process(pid).kill()

至此,核心功能算是搞完了

完整开发

既然是加速球,那肯定需要一个界面,这里自己随手PS画了个图,然后用PyQt5写了个界面出来(写的时候实在是恶心吐了)

最后的一个效果如下

双击便可进行内存清理

右键便可打开进程管理,在进程管理界面点击右键即可关闭

每次只会显示内存占用最多的前十五个进程,点击即杀死进程

同时为了趣味性,我还设置了单次分数和成就,当你达到100分时,即可解锁蓝屏见证者称号。(狗头)

项目地址:github.com/SSRemex/Mem…

写在最后

这个项目就是个玩玩的,切勿在日常生活中使用,怕出问题。

再次强调,内存清理功能对于系统来说没有啥作用,因为windows自身的机制,完全不需要内存清理,反而内存清理可能会造成一些卡顿的问题(因为要重新读取数据)。

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值