简介
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;
}
请问代码怎么开机后自动运行?
知道了,看错了,把RammapCM.exe当成Rammap.exe了,没事了
好
哈哈
测试
如果想要清理間隔快一點可以改config的循環時間嗎
可以的,太快了体验也不好,所以我设置的默认30分钟