欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python制作一個解壓的內存加速球

 更新時間:2023年10月07日 15:00:11   作者:銀空飛羽  
安全管家助手什么的上總會帶一個內存加速球,有關掉進程以及內存清理的功能,本文就來利用Python制作一個解壓的內存加速球,有需要的小伙伴可以參考下

寫在前面

安全管家助手什么的上總會帶一個內存加速球,有關掉進程以及內存清理的功能。雖然本質上,內存清理只是個幌子實際沒啥作用,但是當你深度清理之后,肉眼可見的內存下降確實很解壓。不過每次都得打開安全軟件才能享受解壓的快感實在是有些買櫝還珠了,所以就想嘗試一下自己寫個玩玩。

內存清理

這里我使用python來編寫。

搜索了一下,我確定了兩個方案,一個是通過windows自帶的內存回收機制清理,另一個是通過windows提供的一個APIEmptyWorkingSet清理,下面我們就來對比一下。

windows自帶的內存回收機制

通過申請大量的內存來觸發(fā)windows的內存回收機制,從而清理內存。

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

這里通過psutil獲取到內存總數,并且通過ctypes庫來創(chuàng)建了一個一半總數的緩沖區(qū),隨后立馬刪掉。

但是,這樣會造成臨時的卡頓,并且肉眼可見的內存上漲。而且清理的不干凈。果斷放棄這個方案,一點都不順暢。

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

而經過與某管家進行對比,發(fā)現效果大差不大,他們可能做了一些內存整理的優(yōu)化。

進程終止

殺死進程就更簡單了,這里為了避免出問題,我只保留他們的父進程,依舊是通過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()

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

完整開發(fā)

既然是加速球,那肯定需要一個界面,這里自己隨手PS畫了個圖,然后用PyQt5寫了個界面出來(寫的時候實在是惡心吐了)

最后的一個效果如下

雙擊便可進行內存清理

右鍵便可打開進程管理,在進程管理界面點擊右鍵即可關閉

每次只會顯示內存占用最多的前十五個進程,點擊即殺死進程

同時為了趣味性,我還設置了單次分數和成就,當你達到100分時,即可解鎖藍屏見證者稱號。(狗頭)

項目地址:github.com/SSRemex/MemeoryCleaner

到此這篇關于基于Python制作一個解壓的內存加速球的文章就介紹到這了,更多相關Python內存加速球內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論