Ща я рааскажу историю, как я когда-то совсем случайным образом сделал такую прогу. Дело было давно, когда я начинал только программить. Я делал прогу для рисования мультиков, типа анимированного Paint'а. Конечно я тогда ничо особово делать не умел, поэтому каждый кадр у меня лежал в Picture-Box'е. 5-секундная анимация у меня тогда занимала 60 МБ . И вот при одном из запусков программыя заметил, что почему-то после загрузки анимации и закрытии программы у меня чистилась оперативка. Ну я не долго думая Сделал похожую прогу, которая загружает 1-мегабайтный рисунок 100 раз, потом их отгружает и чистится опреатива. У меня тогда был офигенный восторг, потому что у меня тогда самая крутая прога была типа калькулятора. Только серез месяц я понял, как она работает: В оперативе лежит много неиспользуемого хлама нулевого приоритета, и когда я загружаю свои 100 одинаковых картинок, Винда думает, что они очень нужные и отгружает из оперативы всю инфу нулевого приоритета. Потом я отгружаю свои картинки, и оператива становится очищенной. Кроме нулевого приоритета по-моему неотчего больше чистить. Вот и сказки конец..
Читать/писать память другого процесса ReadProcessMemory/WriteProcessMemory, читать непосредственно оперативную память возможно через CreateFile с именем устройства RAM, либо через создание драйвера
2Vilya: А как ты узнавал сколько в это время в оперативке собственно хлама?
Ведь по сути всё что нужно в этот момент скидывалось на диск, а потом долго(!) читалось опять в память.
Я собственно тоже надавно столкнулся с этой проблемой, точнее с таким вариантом очистки памяти, но после того как все проги активируются всё опять встаёт на свои места и память почти что не освобождается...
После долгой работы и открытии/закрытии программ оператива очищается, но вот когда очищаешь при множестве открытых программ тогда всё скидывается в виртуалку.
Прикол состоит в том, что глупая Винда не определяет, сколько программе нужно оперативы, а на всякий случай резервирует под нее сразу дофига. Поскольку не все страницы юзаются процессом, тупая Винда иногда свопит эти страницы, только определяет это она уж больно плохо и не свопит без необходимости (я вообще не уверен, что она свопит именно пустые страницы преимущественно :D). Поэтому можно самому определять, какие страницы пустые и свопить их, а можно грохать пустые страницы у процесса из памяти (только не грохнуть случайно те страницы, которые ему вдруг звхочецца поюзать). А можно тупо, как это делают большинство программ, просить у Винды дочерта памяти, Винда сразу начнет свопить все подряд, думая что твоему процессу вся эта память позарез нужна, после чего всю память освободить и Винда по мере выполнения других процессов будет загружать из свопа именно те страницы, которые юзаются. Только она потом все равно будет свопать память процессов черт-знает-как и память снова станет похожа на винигрет.