И снова про память...

habib
Дата: 06.05.2006 21:13:51
Пишу несложную прогу на C#.NET Fm 2.0 и конечно она "жрет" память - про это знают все, все знают известный прием:

[ DllImport( "kernel32.dll" ) ]
public static extern bool SetProcessWorkingSetSize ( IntPtr handle, int minimumWorkingSetSize, int maximumWorkingSetSize );

.......

 SetProcessWorkingSetSize( System.Diagnostics.Process.GetCurrentProcess().Handle,-1, -1 );

НО, терзают меня смутные сомнения, что есть еще более радикальные методы, объясню на примере:
Берем мою прогу.
1. Запускаем, форма открывается, памяти ~17М (если воспользоваться приведенным выше куском кода тогда имеем 8М)
2. Жмем Минимайз, памяти ~840К(тут ничего не меняется)
3. Максимайз, памяти ~5М (~3,2М)
4. Дальше жмем Минимайз/Максимайз - память так и колеблется как в п.п.2-3.
5. Если вызываем новые формы Память раздувается на 1М, 2М, 3М, 5М и т.д., но после выполнения п.п.2.3. все становится как в тех таки п.п.2.3.

Берем "серьезную" прогу тоже на .NET Fm 2.0 Notebook Hardware Control
И что мы видим?
п.1 нету, есть только п.п.2.3, с поправкой на объем памяти, который условно пропорционален тому насколько их прога должна быть толще моей.

Где собака порылась?
Или может я по неопытности глупости говорю?

З.Ы. Пробовал делать программно Минимайз-Максимайз - эффекта нету, запускать не раскрывая формы (в фоне) - тоже эффекта нет, только если ручками...
savolv
Дата: 07.05.2006 10:09:15
Посмотри тут. Люди уже давно спорят.
http://www.gotdotnet.ru/Forums/Common/310229.aspx
и тут
http://www.gotdotnet.ru/Forums/Common/314978.aspx
habib
Дата: 08.05.2006 13:14:08
люди конечно спорят, но мня интересует, как программно создать эффект равнозначный сворачиванию-зазворачиванию программы. GC.Collect(); дает нулевой эффект, программно Минимайз-Максимайз - тоже не помогает...
об этом там не спорят :)