Мое приложение работает под управлением .NET 4.0 и WinForm.
Используются Mdi App и сторонние элементы управления.
Когда он запущен, получение все еще увеличивает размер виртуальной памяти (фиксированной).
Я мог бы уменьшить и выпустить размер WorkingSet с такими строками
GC.Collect(GC.MaxGeneration);
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(p.Handle, -1, -1);
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
Работает хорошо.
Что ж, для бизнес-логики должно быть открыто несколько экранов, поэтому объем памяти все еще растет, и приложение, наконец, перестает работать.
Но я не мог уменьшить или освободить размер виртуальной памяти, который уже вырос.
Меня пытались настроить в app.config
<runtime>
<DisableDoubleMapping enabled="true" />
<gcTrimCommitOnLowMemory enabled="true"/>
</runtime>
Это не работает.
Любые эффекты на это.
Меня пытались просмотреть с помощью VMMap 3.1.
Изображения в основном .net ngen image.
Часть сборок и дополнительных ссылок dll не так уж и велика.
Конечно, некоторые из dll (третьи парные элементы управления для winform) около 5 ~ 6 МБ.
Как я могу уменьшить размер виртуальной памяти (с подтверждением) в моем приложении?
Пожалуйста, дайте мне знать лучше как можно скорее.
Как это
SetProcessWorkingSetSize(p.Handle, -1, -1);
Спасибо.