Rammap自动化–吃掉无用内存!

简介

Rammap是一款专门用于内存管理的工具。它的原理是通过清理内存中无用的数据,来释放更多的空间和资源供其他程序使用。具体来说,Rammap会扫描内存中的所有数据,并将其中的无用数据清除。这些无用数据可能是已经关闭的程序留下的一些缓存、垃圾数据、内存泄漏等。通过清理这些无用数据,Rammap可以有效地提高系统的性能和稳定性。同时,Rammap也可以监控系统的内存使用情况,并在需要时自动清理内存,从而保证系统的运行效率和稳定性。

微软官方文档

自动执行内置的清理功能

Rammap提供可供调用的cmd指令。

2024年4月更新

去年我用C语言(抄)写的不太好用了,在最新版windows11上会开机弹出终端,所以我用C#重写了一个,解决了这个问题。

using System;
using System.Diagnostics;
using System.Timers;
using System.Windows.Forms;

namespace TrayApp
{
    class Program
    {
        static NotifyIcon trayIcon;
        static System.Timers.Timer timer;

        static void Main(string[] args)
        {
            trayIcon = new NotifyIcon
            {
                // 设置托盘图标的图标
                Icon = new System.Drawing.Icon("icon.ico"),

                // 设置托盘图标的提示信息
                Text = "My Tray App"
            };

            // 添加一个右键菜单项
            ContextMenuStrip menu = new ContextMenuStrip();
            menu.Items.Add("退出", null, OnExit);
            menu.Items.Add("设置定时器间隔", null, SetTimerInterval);
            trayIcon.ContextMenuStrip = menu;

            // 显示托盘图标
            trayIcon.Visible = true;

            timer = new System.Timers.Timer();

            // 设置定时器的间隔(单位:毫秒)
            timer.Interval = 100000; // 这里设置为 10000 毫秒,即 10 秒

            // 设置定时器触发事件的处理方法
            timer.Elapsed += TimerElapsed;

            // 启动定时器
            timer.Start();

            trayIcon.MouseMove += TrayIcon_MouseMove;

            Application.Run();
        }

        static void SetTimerInterval(object sender, EventArgs e)
        {
            // 弹出对话框或者输入框,让用户输入定时器的间隔
            string input = Microsoft.VisualBasic.Interaction.InputBox("请输入定时器的间隔(秒):", "设置定时器间隔", (timer.Interval / 1000).ToString());

            // 尝试将用户输入的间隔转换为整数
            if (input != "") {
            if (int.TryParse(input, out int interval) && interval > 0)
            {
                // 更新定时器的间隔
                timer.Interval = interval * 1000;
            }
            else
            {
                MessageBox.Show("请输入有效的数字间隔。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            }

        }

        static void OnExit(object sender, EventArgs e)
        {
            timer.Stop();

            Application.Exit();
        }

        static void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            Console.WriteLine("Task executed at: " + DateTime.Now);
            ExecuteCommand("RAMMap -Ew");
            ExecuteCommand("RAMMap -Es");
            ExecuteCommand("RAMMap -Em");
            ExecuteCommand("RAMMap -Et");
            ExecuteCommand("RAMMap -E0");
        }

        static void ExecuteCommand(string command)
        {
            // 创建一个进程对象
            Process process = new Process();

            // 指定要执行的命令
            process.StartInfo.FileName = "cmd.exe";

            // 不使用 shell 启动进程
            process.StartInfo.UseShellExecute = false;

            // 重定向输入、输出和错误流
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;

            // 隐藏窗口
            process.StartInfo.CreateNoWindow = true;

            process.Start();

            process.StandardInput.WriteLine(command);
            process.StandardInput.AutoFlush = true;

            process.WaitForExit();
        }

        static void TrayIcon_MouseMove(object sender, MouseEventArgs e)
        {
            trayIcon.Text = "时间间隔:" + timer.Interval/1000 + "(秒)";
        }
    }
}

下载

C语言代码实现调用

#include <Windows.h>
#include <shellapi.h>
#include <WinUser.h>
#include <tchar.h>
#include <shlobj.h>
#include <stdio.h>
#include <conio.h>

int main()
{

    // 读取自定义的清理时间
    FILE *fp;
    int num;
    fp = fopen("config.txt", "r");
    if (fp == NULL)
    {
        printf("无法打开配置文件!\n");
        getch();
        return 1;
    }

    fscanf(fp, "%d", &num);
    long long sleep_time = 60000 * num;
    char msg[256];
    sprintf(msg, "rammap--自动清理虚拟内存(间隔:%d分钟)", num);
    HWND hw = FindWindow(_T("ConsoleWindowClass"), NULL); // 获取句柄
    ShowWindow(hw, SW_HIDE); // 隐藏
    NOTIFYICONDATA nid; // 系统托盘
    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hWnd = hw;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    _tcscpy_s(nid.szTip, _countof(nid.szTip), _T(msg)); // 鼠标放在托盘图标上时显示的文字
    HICON hIcon = (HICON)LoadImage(NULL, _T("icon.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
    nid.hIcon = hIcon; // 图标
    Shell_NotifyIcon(NIM_ADD, &nid); // 在托盘区添加图标

    while (1)
    {

        // 调用Rammap,可以依照自己的Rammmap名更改
        system("RAMMap -Ew");
        system("RAMMap -Es");
        system("RAMMap -Em");
        system("RAMMap -Et");
        system("RAMMap -E0");

        Sleep(sleep_time); // 延迟一分钟
    }

    Shell_NotifyIcon(NIM_DELETE, &nid); // 从托盘中删除图标

    return 0;
}

实测效果

点击下载

文件内有具体的使用说明,以及如何实现开机自启动。

评论

  1. hje233
    12 月前
    2023-10-06 1:05:21

    请问代码怎么开机后自动运行?

  2. 游客1
    已编辑
    12 月前
    2023-10-06 1:07:42

    知道了,看错了,把RammapCM.exe当成Rammap.exe了,没事了

    • 博主
      游客1
      12 月前
      2023-10-09 18:51:10

      • 博主
        hackerxiao
        4 月前
        2024-5-14 15:22:20

        哈哈

        • 博主
          hackerxiao
          4 月前
          2024-5-14 15:22:31

          测试

  3. kk
    11 月前
    2023-10-21 13:44:29

    如果想要清理間隔快一點可以改config的循環時間嗎

    • 博主
      kk
      11 月前
      2023-10-23 10:24:22

      可以的,太快了体验也不好,所以我设置的默认30分钟

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇