선언:

C#

[DllImport("psapi")]
public static extern Boolean EmptyWorkingSet(IntPtr hProcess);


VB.NET

<DllImport("psapi")> _
Public Shared Function EmptyWorkingSet(ByVal hProcess As IntPtr) As Boolean
End Function




사용 예제:

C#

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ApiReference {
    class Program {
        [DllImport("psapi")]
        public static extern Boolean EmptyWorkingSet(IntPtr hProcess);
        
        public static void Main(string[] args) {
            Int64 cleanedMemories = 0;
            foreach (Process p in Process.GetProcesses()) {
                try {
                    Int64 ws = p.WorkingSet64;
                    EmptyWorkingSet(p.Handle);
                    p.Refresh();
                    cleanedMemories += (ws - p.WorkingSet64);
                } catch { }
            }

            Console.WriteLine("정리된 메모리: {0:N0} KB", cleanedMemories / 1000);
            Console.ReadKey(true);
        }
    }
}


VB.NET

Imports System.Diagnostics
Imports System.Runtime.InteropServices

Namespace ApiReference
    Class Program
        <DllImport("psapi")> _
        Public Shared Function EmptyWorkingSet(hProcess As IntPtr) As [Boolean]
        End Function

        Public Shared Sub Main(args As String())
            Dim cleanedMemories As Int64 = 0
            For Each p As Process In Process.GetProcesses()
                Try
                    Dim ws As Int64 = p.WorkingSet64
                    EmptyWorkingSet(p.Handle)
                    p.Refresh()
                    cleanedMemories += (ws - p.WorkingSet64)
                Catch
                End Try
            Next

            Console.WriteLine("정리된 메모리: {0:N0} KB", cleanedMemories \ 1000)
            Console.ReadKey(True)
        End Sub
    End Class
End Namespace




예제 실행 결과:



매개 변수 설명:

hProcess - 작업 집합 메모리에서 페이지를 정리할 프로세스의 핸들을 입력합니다.




API 설명:

작업 집합 메모리에 있는 페이지를 최대한 제거합니다.




참고:

EmptyWorkingSet (MSDN)




요구 사항:

Windows XP 이상




비고:

이 API를 사용하기 위해서는 프로세스 핸들에 PROCESS_SET_QUOTA 권한과 PROCESS_QUERY_INFORMATION 또는 PROCESS_QUERY_LIMITED_INFORMATION 권한이 있어야 합니다.

SetProcessWorkingSetSize 또는 SetProcessWorkingSetSizeEx API를 이용해도 똑같은 결과를 낼 수 있습니다.



'API Reference' 카테고리의 다른 글

49. PROCESS_MEMORY_COUNTERS  (0) 2014.12.11
48. GetDiskFreeSpace  (0) 2014.12.09
46. GetFileSize  (0) 2014.11.09
45. OpenFile  (0) 2014.11.09
44. OFSTRUCT  (0) 2014.11.09

+ Recent posts