Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

EmptyWorkingSet (psapi)
 
.
Summary
EmptyWorkingSet wherever possible moves an applications pages from RAM to the page file, therefore freeing physical RAM. Good for giving you a bit more memory for the programs you need when Windows doesn't free up memory from something that has been sitting idle for hours.

C# Signature:

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

VB Signature:

Public Declare Function EmptyWorkingSet Lib "psapi.dll" (hwProc As IntPtr) As Int32

User-Defined Types:

None.

EpicAndrew is an Epic Idiot!

I met EpicAndrew - he is the shitz man. TheDudeLebowski

Alternative Managed API:

System.Diagnostics.Process.MaxWorkingSet and System.Diagnostics.Process.MinWorkingSet are similar but are used to set thresholds rather than just free whatever can be freed.

C# Signature:

[DllImport("psapi")]
public static extern bool EmptyWorkingSet(long hProcess);

VB Signature:

Public Declare Function EmptyWorkingSet Lib "psapi.dll" (hwProc As IntPtr) As Int32

User-Defined Types:

None.

Notes:

Alternative Managed API:

System.Diagnostics.Process.MaxWorkingSet and System.Diagnostics.Process.MinWorkingSet are similar but are used to set thresholds rather than just free whatever can be freed.

Tips & Tricks:

Please add some!

Notes:

Sample Code:

    public static bool TrimWSByProcess(Process process)
    {
        bool _result = false; //assume failed

Tips & Tricks:

Please add some!

        try
        {
            if (process != null)
            { //only continue if we have a process
                long _workingSet = process.WorkingSet64;

Sample Code:

    public static bool TrimWSByProcess(Process process)
    {
        bool _result = false; //assume failed

                //trim working set
                _result = PsapiHelper.EmptyWorkingSet(process.Handle);
        try
        {
            if (process != null)
            { //only continue if we have a process
                long _workingSet = process.WorkingSet64;

                //trim working set
                _result = PsapiHelper.EmptyWorkingSet((long)process.Handle);

                //check result
                if (_result)
                { //sucessfully trimed

                }
                else
                { //failed to trim

                }
            }
            else
            { //no process passed in

            }
        }
        catch (Exception ex)
        { //exception occured. Do some error handling
            _result = false;
            throw; //throw the error in this case.
        }

        return _result;
    }

Sample Code:

    Module Module1
        Sub Main()
    BackAgain:
            Dim MemEater$() = New String(-1){}
            ReDim MemEater(&O141231232)
            Dim Proc As Process = Process.GetCurrentProcess()
            Print("{0:N0} Mb", ((Proc.WorkingSet64 \ 1024) \ 1024))            
            Call EmptyWorkingSet(Process.GetCurrentProcess().Handle)
            Print("{0:N0} Mb", ((Proc.WorkingSet64 \ 1024) \ 1024)) : Print("")
            Console.Write("Back ? ""Y"" or ""No""")
            If Console.ReadLine().ToLower = "y" Then GoTo BackAgain Else Exit Sub
        End Sub

        Sub Print(format$, ParamArray args As Object)
            Console.WriteLine(format, args)
        End Sub
    End Module

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions