基于Python制作一个解压的内存加速球

 更新时间:2023年10月07日 15:00:11   作者:银空飞羽  
安全管家助手什么的上总会带一个内存加速球,有关掉进程以及内存清理的功能,本文就来利用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/MemeoryCleaner

到此这篇关于基于Python制作一个解压的内存加速球的文章就介绍到这了,更多相关Python内存加速球内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现高效提取PDF中的表格数据并导出为 TXT或Excel

    Python实现高效提取PDF中的表格数据并导出为 TXT或Excel

    在日常办公、数据分析或信息归档过程中,我们经常会遇到包含表格数据的 PDF 文件,本文将演示如何将 PDF 表格数据导出为 TXT 和 Excel 文件,有需要的小伙伴可以了解下
    2026-01-01
  • Python中文件遍历的两种方法

    Python中文件遍历的两种方法

    这篇文章主要介绍了Python中文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现,需要的朋友可以参考下
    2014-06-06
  • python3编码问题汇总

    python3编码问题汇总

    本文给通过一个具体的编码问题的解决办法,给大家详细分享了python中的编码问题的来龙去脉,非常的细致全面,有需要的小伙伴可以参考下
    2016-09-09
  • 使用pandas的box_plot去除异常值

    使用pandas的box_plot去除异常值

    今天小编就为大家分享一篇使用pandas的box_plot去除异常值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python实现周日历与时间相互转换

    Python实现周日历与时间相互转换

    周日历是日常生活中不常用到的历法系统,一般用于政府、商务的会计年度或者学校教学日历中。本文为大家介绍了如何利用Python语言实现周日历与时间相互转换,感兴趣的可以学习一下
    2022-07-07
  • python3反转字符串的3种方法(小结)

    python3反转字符串的3种方法(小结)

    这篇文章主要介绍了python3反转字符串的3种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • python实现报表自动化详解

    python实现报表自动化详解

    这篇文章主要介绍了python实现报表自动化详解,涉及python读,写excel—xlwt常用功能,xlutils 常用功能,xlwt写Excel时公式的应用等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Python BautifulSoup 节点信息

    Python BautifulSoup 节点信息

    这篇文章主要介绍了Python BautifulSoup 节点信息,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python Pygame中精灵和碰撞检测详解

    Python Pygame中精灵和碰撞检测详解

    对于游戏中出现的每一样东西,比如砖块箱子水管地面,还有人物都可以看成是一个独立的物体,所以每个物体类都继承了pygame的精灵类pg.sprite.Sprite,这篇文章主要给大家介绍了关于Python Pygame中精灵和碰撞检测的相关资料,需要的朋友可以参考下
    2021-10-10
  • 一篇文章带你了解python正则表达式的正确用法

    一篇文章带你了解python正则表达式的正确用法

    这篇文章主要介绍了Python中正则表达式的详细教程,正则表达式是Python学习进阶当中的重要内容,需要的朋友可以参考下
    2021-08-08

最新评论