Автоочистка при достижении %
Цитата: Илья от 26.07.2022, 13:52Всем привет, задался вопросом как сделать автоочитску при достижении процента, вот картинка, подскажите пожалуйста как это можно реализовать, может кто-то это уже делал.
Всем привет, задался вопросом как сделать автоочитску при достижении процента, вот картинка, подскажите пожалуйста как это можно реализовать, может кто-то это уже делал.
Цитата: XpucT от 26.07.2022, 20:10Привет 🖐
Не очень понятно, о какой конкретно очистке идёт речь.
Но так или иначе, обычно просто занятое делим на общее и умножаем на 100 ➜ получаем процент занятого от общего.
Привет 🖐
Не очень понятно, о какой конкретно очистке идёт речь.
Но так или иначе, обычно просто занятое делим на общее и умножаем на 100 ➜ получаем процент занятого от общего.
Цитата: Илья от 26.07.2022, 21:34Очистка оперативной памяти, пытался в интернете найти но увы.
Я пытался вот так.
public ulong TotalRam() => new ComputerInfo().TotalPhysicalMemory;
public ulong FreeRam() => new ComputerInfo().AvailablePhysicalMemory;
ulong num;
num = (TotalRam() - FreeRam()) * 100 / TotalRam();
Но у меня не чего не получилось(.
Очистка оперативной памяти, пытался в интернете найти но увы.
Я пытался вот так.
public ulong TotalRam() => new ComputerInfo().TotalPhysicalMemory;
public ulong FreeRam() => new ComputerInfo().AvailablePhysicalMemory;
ulong num;
num = (TotalRam() - FreeRam()) * 100 / TotalRam();
Но у меня не чего не получилось(.
Цитата: Илья от 30.07.2022, 12:50Спасибо Хачатур, напряг извилины и нашел решение 🧠👍
Спасибо Хачатур, напряг извилины и нашел решение 🧠👍
Цитата: Илья от 30.07.2022, 16:49Ошибся, все равно не работает, попробовал так показалось заработало, но это был обработчик
CheckedChanged, что то я растерялся 😞if (поистечению5toolStripMenuItem1.Checked) { ManagementObjectSearcher ramMonitor = new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem"); foreach (ManagementObject objram in ramMonitor.Get()) { ulong totalRam = Convert.ToUInt64(objram["TotalVisibleMemorySize"]); ulong busyRam = totalRam - Convert.ToUInt64(objram["FreePhysicalMemory"]); if (busyRam * 100 / totalRam >= 20) { if (worksettoolStripMenuItem9.Checked) { MemoryClean.EmptyWorkingSet(); } } } }
Ошибся, все равно не работает, попробовал так показалось заработало, но это был обработчик СкопированоCheckedChanged , что то я растерялся 😞
if (поистечению5toolStripMenuItem1.Checked)
{
ManagementObjectSearcher ramMonitor = new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem");
foreach (ManagementObject objram in ramMonitor.Get())
{
ulong totalRam = Convert.ToUInt64(objram["TotalVisibleMemorySize"]);
ulong busyRam = totalRam - Convert.ToUInt64(objram["FreePhysicalMemory"]);
if (busyRam * 100 / totalRam >= 20)
{
if (worksettoolStripMenuItem9.Checked)
{
MemoryClean.EmptyWorkingSet();
}
}
}
}
Цитата: yuri от 30.07.2022, 18:01Добрый день. Твой код работает как надо, возможно, Твои проверки
.Checkedне дают запустится нужному Тебе методу
[spoiler title="Данный код выводит такое же значение, что и трей-виджет Win 10 Tweaker"]foreach (var RAM in new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem").Get()) { ulong totalRAM = Convert.ToUInt64(RAM["TotalVisibleMemorySize"]), busyRAM = totalRAM - Convert.ToUInt64(RAM["FreePhysicalMemory"]); MessageBox.Show((busyRAM * 100 / totalRAM).ToString()); }[/spoiler]
Добрый день. Твой код работает как надо, возможно, Твои проверки Скопировано.Checked не дают запустится нужному Тебе методу
foreach (var RAM in new ManagementObjectSearcher("SELECT TotalVisibleMemorySize,FreePhysicalMemory FROM Win32_OperatingSystem").Get()) {
ulong
totalRAM = Convert.ToUInt64(RAM["TotalVisibleMemorySize"]),
busyRAM = totalRAM - Convert.ToUInt64(RAM["FreePhysicalMemory"]);
MessageBox.Show((busyRAM * 100 / totalRAM).ToString());
}
Цитата: Илья от 30.07.2022, 18:33Привет, у меня все эти .
Checkedстоят ))
Я хотел как в Win 10 Tweakere сделать при достижении 30, 40 процентов занятой оперативной памяти.
Привет, у меня все эти .СкопированоChecked стоят ))
Я хотел как в Win 10 Tweakere сделать при достижении 30, 40 процентов занятой оперативной памяти.
Цитата: yuri от 30.07.2022, 18:39Ты на правильном пути, однако не понятно, в чем именно проблема. Твоя проверка на
busyRam * 100 / totalRam >= 20работает замечательно...
Самое очевидное здесь искать проблемную строчку дебагом или например, MessageBox(ом)
Ты на правильном пути, однако не понятно, в чем именно проблема. Твоя проверка на СкопированоbusyRam * 100 / totalRam >= 20 работает замечательно...
Самое очевидное здесь искать проблемную строчку дебагом или например, MessageBox(ом)
Цитата: Илья от 30.07.2022, 18:41Скажи пожалуйста ты в проекте попробовал? и как ты пробовал?
Скажи пожалуйста ты в проекте попробовал? и как ты пробовал?
Цитата: Илья от 30.07.2022, 18:48static int MemoryEmptyWorkingSets = 2; static extern uint NtSetSystemInformation(int InfoClass, ref int Info, int Length); public static int EmptyWorkingSet() { using (var current = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges)) { TokPriv1Luid newst; newst.Count = 1; newst.Luid = 0L; newst.Attr = 2; if (!LookupPrivilegeValue(null, "SeProfileSingleProcessPrivilege", ref newst.Luid)) { return 1; } if (!AdjustTokenPrivileges(current.Token, false, ref newst, 0, IntPtr.Zero, IntPtr.Zero)) { return 2; } NtSetSystemInformation(80, ref MemoryEmptyWorkingSets, Marshal.SizeOf(2)); } return 0; }Скажи ты мог бы попробовать с этим методом
if (busyRam / totalRam * 100 >= 30) { MemoryClean.EmptyWorkingSet(); }
static int MemoryEmptyWorkingSets = 2;
static extern uint NtSetSystemInformation(int InfoClass, ref int Info, int Length);
public static int EmptyWorkingSet()
{
using (var current = WindowsIdentity.GetCurrent(TokenAccessLevels.Query | TokenAccessLevels.AdjustPrivileges))
{
TokPriv1Luid newst; newst.Count = 1; newst.Luid = 0L; newst.Attr = 2;
if (!LookupPrivilegeValue(null, "SeProfileSingleProcessPrivilege", ref newst.Luid)) { return 1; }
if (!AdjustTokenPrivileges(current.Token, false, ref newst, 0, IntPtr.Zero, IntPtr.Zero)) { return 2; }
NtSetSystemInformation(80, ref MemoryEmptyWorkingSets, Marshal.SizeOf(2));
}
return 0;
}
Скажи ты мог бы попробовать с этим методом
if (busyRam / totalRam * 100 >= 30)
{
MemoryClean.EmptyWorkingSet();
}
Цитата: Илья от 30.07.2022, 19:01Сори
public static int SystemInfoLength; public static GCHandle gcHandle; [DllImport("advapi32", SetLastError = true)] static extern bool LookupPrivilegeValue(string host, string name, ref long pluid); [DllImport("advapi32", SetLastError = true)] static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen); [DllImport("ntdll", SetLastError = true)] static extern uint NtSetSystemInformation(int InfoClass, ref int Info, int Length);первые две вроде не нужны
Сори
public static int SystemInfoLength;
public static GCHandle gcHandle;
[DllImport("advapi32", SetLastError = true)]
static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[DllImport("advapi32", SetLastError = true)]
static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
[DllImport("ntdll", SetLastError = true)]
static extern uint NtSetSystemInformation(int InfoClass, ref int Info, int Length);
первые две вроде не нужны