Оптимизация программы с помощью SetProcessWorkingSetSize

Вопрос касается функции SetProcessWorkingSetSize. Пробую на VB.NET: открываю очередную форму (приложение MDI) и после выполнения Form_Load запускаю функцию с параметрами: SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1). Без неё taskmgr показывал 35-37 Mb занимаемого ОЗУ, после выполнения - около 7-10 Mb. Вопрос: есть ли смысл это использовать (для уменьшения занимаего ОЗУ).
4 ответа

Подскажите пожалуйста, есть программа, которая использует множество api dll, переодически аппетиты программы возрастают до запредела, например 100 мб оперативной памяти, если делать своп, то занимаемый обьем падает до 800 кб, хочу использовать функцию SetProcessWorkingSetSize и ограничить обьем занимаемой памяти в рамках от 3 до 8 мб. Что думаете?
Public Class MemoryManagement
    ' класс для очистки оперативной памяти
    Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, _
                                                                          ByVal minimumWorkingSetSize As Integer, _
                                                                          ByVal maximumWorkingSetSize As Integer) As Integer
    Public Shared Sub CleanMemory()
        'GC.Collect()
        'GC.WaitForPendingFinalizers()
        If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
                        SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, 3000000, 8000000)
        End If
    End Sub


Что думаете?
Думаю что нужно искать утечку памяти.


Как искать утечку и в чем она может выражаться? Глобальных переменных у меня мало, массивов глобальных нет. Есть бесконечный цикл, замедленный Threding.Sleep с 500 мс, в котором обрабатывается 3 dll-ки.Кстати, рост оперативки наблюдал на Windows 7 64, когда постепенно у меня программа заняла 100-200 мб оперативки, растет медленно, на Windows XP такого нет, оперативка фиксируется на 17 мб и не больше растет.


Как искать утечку и в чем она может выражаться?
Где-то выделяется память, но не освобождается. Возможно память выделяется не явно, например программа получает несколько хендлов, но не закрывает их когда они больше не нужны.