AI prompts
base on This free RAM cleaner uses native Windows features to optimize memory areas. It's a compact, portable, and smart application. <div align="center">
<h1>Windows Memory Cleaner</h1>
[![](https://img.shields.io/github/license/IgorMundstein/WinMemoryCleaner?style=for-the-badge)](/LICENSE)
[![](https://img.shields.io/github/downloads/IgorMundstein/WinMemoryCleaner/total?style=for-the-badge)](https://github.com/IgorMundstein/WinMemoryCleaner/releases/latest/)
<picture>
<img src="/.github/images/main-window.png">
</picture>
<p align="justify">
This free RAM cleaner uses native Windows features to clear memory areas. Sometimes, programs do not release the allocated memory, making the computer slow. That is when you use Windows Memory Cleaner to optimize the memory so you can keep working without wasting time restarting your system.
</p>
<p align="justify">
The app has a minimalistic interface and smart features. It's portable, and you do not need to install it, but it requires administrator privileges to run. Click on the download button below and run the executable to get started.
</p>
<p align="center">
<a href="https://github.com/IgorMundstein/WinMemoryCleaner/releases/latest/download/WinMemoryCleaner.exe">
<img alt="DOWNLOAD" src="/.github/images/download-button.png">
</a>
</p>
</div>
## 🖥️ Computer requirements
- Microsoft .NET Framework 4
- Windows `XP` `Vista` `7` `8` `10` `11`
- Windows Server `2003` `2008` `2012` `2016` `2019` `2022`
## 🚀 Features
### Auto optimization
- `Every X hours` The optimization will run by period
- `When free memory is below X percent` The optimization will run if free memory is below the specified percentage
### Compact Mode
- Arrow (Up/Down) next to the minimize button to collapse and extend the window
<picture>
<img src="/.github/images/main-window-compact.png">
</picture>
### Memory Areas
- `Combined Page List` Flushes the blocks from the combined page list effectively only when page combining is enabled
- `Modified Page List` Flushes memory from the modified page list, writing unsaved data to disk and moving the pages to the standby list
- `Processes Working Set` Removes memory from all user-mode and system working sets and moves it to the standby or modified page lists
- `Standby List` Flushes pages from all standby lists to the free list
- `Standby List (Low Priority)` Flushes pages from the lowest-priority standby list to the free list
- `System Working Set` Removes memory from the system cache working set
### Multi-Language
- `Albanian` `Arabic` `Bulgarian` `Chinese` `Dutch` `English` `French` `German` `Greek` `Indonesian` `Irish` `Italian` `Japanese` `Korean` `Macedonian` `Persian` `Polish` `Portuguese` `Russian` `Serbian` `Slovenian` `Spanish` `Turkish` `Ukrainian`
### Processes excluded from optimization
- You can build a list of processes to ignore when memory is optimized
### Optimization hotkey
- Set a keyboard global hotkey to run the optimization. `CTRL + ALT + M` is the default and customizable value
### Settings
- `Always on top` Pins the window to the top of all your windows
- `Auto update` Keeps the app up to date. It checks for updates every 24 hours
- `Close after optimization` Closes the app after optimization
- `Close to the notification area` Minimize the app to the system tray when clicking the close (X) button
- `Run on low priority` It limits the app resource usage by reducing the process priority and ensuring it runs efficiently. It might increase the optimization time, but it helps if your Windows freezes during it
- `Run on startup` Runs the app after the system boots up. It creates an entry on Windows **Task Scheduler** and Windows Registry path **SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run**
- `Show optimization notifications` Sends a message to the notification area after optimization. It includes the approximate memory released
- `Show virtual memory` It also monitors the virtual memory usage
- `Start minimized` The app will start minimized to the system tray. Single-click on the icon to restore
### System tray (Notification area)
- Menu
<picture>
<img src="/.github/images/system-tray.png">
</picture>
- Notification
<picture>
<img src="/.github/images/notification.png">
</picture>
### Tray icon
- `Image` Show app icon
- `Memory usage` Show physical memory usage with a background color based on the value
- `(0% - 79%)` <picture><img src="/.github/images/memory-usage.png"></picture>
- `(80% - 89%)` <picture><img src="/.github/images/memory-usage-warning.png"></picture>
- `(90% - 100%)` <picture><img src="/.github/images/memory-usage-danger.png"></picture>
## 🔳 Command arguments (NO GUI)
You can use the following arguments to run the app silently.
- `/CombinedPageList`
- `/ModifiedPageList`
- `/ProcessesWorkingSet`
- `/StandbyList` OR `/StandbyListLowPriority`
- `/SystemWorkingSet`
Shortcut target example
`C:\WinMemoryCleaner.exe /ModifiedPageList /ProcessesWorkingSet /StandbyList /SystemWorkingSet`
## 📖 Logs
The app generates logs in the Windows event
1. Press **Win + R** to open the Run command dialog box
2. Type **eventvwr** and press **Enter** to open the Event Viewer
<picture>
<img src="/.github/images/windows-event-log.png">
</picture>
## ❓ Frequently Asked Questions (FAQ)
### What are the project requirements?
- Minimalistic user interface
- Model-View-ViewModel (MVVM) design pattern
- No third library or DLL dependencies
- Portable (Single .exe file)
- Right-to-left language support and bidirectional text
- S.O.L.I.D. Principles of Object-Oriented
- Use of Windows native methods for memory management
- Windows Event to save logs
- Windows Presentation Foundation (WPF) for user interface
- Windows Registry to save user config
### Where does the app save the user configuration?
Each user setting is saved in the Windows registry path `Computer\HKEY_CURRENT_USER\Software\WinMemoryCleaner`
### Why has the app been flagged as Malware/Virus and blocked by Windows Defender, SmartScreen, or Antivirus?
One of the reasons for this **false alarm** is that the application adds entries to the registry and task scheduler to run the application at startup. Windows doesn't “like” applications with administrator privileges running at startup. I understand that, but this is the way to do it. I apologize, but the application cannot deep clean memory without administrator privileges.
That's a common issue that persists every time a new app version is released. I constantly submit the executable to Microsoft. Usually, it takes up to 72 hours for Microsoft to remove the detection.
It helps if more users [submit the app for malware analysis](https://www.microsoft.com/en-us/wdsi/filesubmission)
Meanwhile, as a workaround, you can [add an exclusion to Windows Security](https://support.microsoft.com/en-us/windows/add-an-exclusion-to-windows-security-811816c0-4dfd-af4a-47e4-c301afe13b26)
## 🌐 Translation
If you are a native speaker of any language other than English, you can contribute by translating the file: [English.json](/src/Resources/Localization/English.json)
💡 You can test any translation by creating a file alongside the executable
1. Visit [https://ss64.com/locale.html](https://ss64.com/locale.html) to get the **locale description** of the language
2. Save it as **{locale-description}.json** using **UTF-8** as character encoding
3. Launch the application. If successful, the new language and changes will be visible
4. Either submit a pull request or upload the file to the [translation discussion](https://github.com/IgorMundstein/WinMemoryCleaner/discussions/14)
💡 If you are a .NET developer
1. You can add the new file to the Resources\Localization folder
2. Change the file build action property to Embedded Resource
3. Rebuild and run the WinMemoryCleaner project
💡 Google Translate tool will be used when a new version requires translated text changes. The contributor's efforts to submit updates are always appreciated.
⭐ Contributors
- `Albanian (Shqip)` [Omer Rustemi](https://github.com/omerrustemicode)
- `Arabic (اللغة العربية)` [Abdulmajeed-Alrajhi](https://github.com/Abdulmajeed-Alrajhi)
- `Bulgarian (български)` [Konstantin](https://github.com/constantinejc)
- `Chinese (Simplified) (中文(简体))` [KaiHuaDou](https://github.com/KaiHuaDou) | [Kun Zhao](https://github.com/kzhdev) | [raydenake22](https://github.com/raydenake22)
- `Chinese (Traditional) (中文(繁體))` [raydenake22](https://github.com/raydenake22) | [rtyrtyrtyqw](https://github.com/rtyrtyrtyqw)
- `Dutch (Nederlands)` [hax4dazy](https://github.com/hax4dazy)
- `French (Français)` [William VINCENT](https://github.com/wixaw)
- `German (Deutsch)` [Calvin](https://github.com/Slluxx)
- `Greek (Ελληνικά)` [tkatsageorgis](https://github.com/tkatsageorgis)
- `Indonesian (Indonesia)` [Eskey](https://github.com/Eskeyz)
- `Irish (Gaeilge)` [Happygolucky254](https://github.com/Happygolucky254)
- `Italian (Italiano)` [wintrymichi](https://github.com/wintrymichi)
- `Japanese (日本語)` [dai](https://github.com/dai)
- `Korean (한국어)` [VenusGirl](https://github.com/VenusGirl)
- `Macedonian (Македонски)` [Dimitrij Gjorgji](https://github.com/Cathadox)
- `Persian (فارسی)` [KavianK](https://github.com/KavianK)
- `Polish (Polski)` [Fresta56](https://github.com/Fresta56)
- `Russian (Русский)` [ruslooob](https://github.com/ruslooob)
- `Serbian (Srpski)` [DragorMilos](https://github.com/DragorMilos)
- `Slovenian (Slovenščina)` [Jadran Rudec](https://github.com/JadranR)
- `Spanish (Español)` [Ajneb Al Revés](https://github.com/AjnebAlReves) | [Nekrodamus](https://github.com/FrannDzs)
- `Turkish (Türkçe)` [Viollje](https://github.com/Viollje)
- `Ukrainian (Українська)` [RieBi](https://github.com/RieBi) | [Oleksander](https://github.com/Mariachi1231)
", Assign "at most 3 tags" to the expected json: {"id":"2395","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"