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

MEMORYSTATUSEX (Structures)
 
.
Summary

Notes:

The CLR offer us no way to tell us that memory is getting tight. Many think this API provides the best solution. This is mentioned by Jeffrey Richter in his book 'CLR via C#' ISBN: 0-7356-2163-2. It is useful in determining if your system is under excessive memory load by looking at the dwMemoryLoad member of the MEMORYSTATUSEX structure. If this value is > 80 (per Mr. Richter in his discussion of Garbage Collection), it is an indication that you might want to consider converting some strong references into weak references. Remember that a weakreference type will be collected when Generation 0 is full, so it is not a good technique for caching (as many seem to think).

C# Definition:

       /// <summary>
    /// contains information about the current state of both physical and virtual memory, including extended memory
    /// </summary>
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public class MEMORYSTATUSEX
    {
        /// <summary>
        /// Size of the structure, in bytes. You must set this member before calling GlobalMemoryStatusEx.
        /// </summary>
        public uint dwLength;

        /// <summary>
        /// Number between 0 and 100 that specifies the approximate percentage of physical memory that is in use (0 indicates no memory use and 100 indicates full memory use).
        /// </summary>
        public uint dwMemoryLoad;

        /// <summary>
        /// Total size of physical memory, in bytes.
        /// </summary>
        public ulong ullTotalPhys;

        /// <summary>
        /// Size of physical memory available, in bytes.
        /// </summary>
        public ulong ullAvailPhys;

        /// <summary>
        /// Size of the committed memory limit, in bytes. This is physical memory plus the size of the page file, minus a small overhead.
        /// </summary>
        public ulong ullTotalPageFile;

        /// <summary>
        /// Size of available memory to commit, in bytes. The limit is ullTotalPageFile.
        /// </summary>
        public ulong ullAvailPageFile;

        /// <summary>
        /// Total size of the user mode portion of the virtual address space of the calling process, in bytes.
        /// </summary>
        public ulong ullTotalVirtual;

        /// <summary>
        /// Size of unreserved and uncommitted memory in the user mode portion of the virtual address space of the calling process, in bytes.
        /// </summary>
        public ulong ullAvailVirtual;

        /// <summary>
        /// Size of unreserved and uncommitted memory in the extended portion of the virtual address space of the calling process, in bytes.
        /// </summary>
        public ulong ullAvailExtendedVirtual;

        /// <summary>
        /// Initializes a new instance of the <see cref="T:MEMORYSTATUSEX"/> class.
        /// </summary>
        public MEMORYSTATUSEX()
        {
        this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
        }
       }

VB Definition:

    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
    Public Class MEMORYSTATUSEX

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _

Public Class MEMORYSTATUSEX

     ''' <summary>
     ''' Initializes a new instance of the <see cref="T:MEMORYSTATUSEX" /> class.
     ''' </summary>
     Public Sub New()
          Me.dwLength = CType(Marshal.SizeOf(GetType(MEMORYSTATUSEX)), UInt32)
     End Sub


        ''' <summary>
        ''' Initializes a new instance of the <see cref="T:MEMORYSTATUSEX" /> class.
        ''' </summary>
        Public Sub New()
        Me.dwLength = CType(Marshal.SizeOf(GetType(MEMORYSTATUSEX)), UInt32)
        End Sub
        ' Fields
        ''' <summary>
        ''' Size of the structure, in bytes. You must set this member before calling GlobalMemoryStatusEx.
        ''' </summary>
        Public dwLength As UInt32
        ''' <summary>
        ''' Number between 0 and 100 that specifies the approximate percentage of physical memory that is in use (0 indicates no memory use and 100 indicates full memory use).
        ''' </summary>
        Public dwMemoryLoad As UInt32
        ''' <summary>
        ''' Total size of physical memory, in bytes.
        ''' </summary>
        Public ullTotalPhys As UInt64
        ''' <summary>
        ''' Size of physical memory available, in bytes.
        ''' </summary>
        Public ullAvailPhys As UInt64
        ''' <summary>
        ''' Size of the committed memory limit, in bytes. This is physical memory plus the size of the page file, minus a small overhead.
        ''' </summary>
        Public ullTotalPageFile As UInt64
        ''' <summary>
        ''' Size of available memory to commit, in bytes. The limit is ullTotalPageFile.
        ''' </summary>
        Public ullAvailPageFile As UInt64
        ''' <summary>
        ''' Total size of the user mode portion of the virtual address space of the calling process, in bytes.
        ''' </summary>
        Public ullTotalVirtual As UInt64
        ''' <summary>
        ''' Size of unreserved and uncommitted memory in the user mode portion of the virtual address space of the calling process, in bytes.
        ''' </summary>
        Public ullAvailVirtual As UInt64
        ''' <summary>
        ''' Size of unreserved and uncommitted memory in the extended portion of the virtual address space of the calling process, in bytes.
        ''' </summary>
        Public ullAvailExtendedVirtual As UInt64
    End Class
      ' Fields
      ''' <summary>
      ''' Size of the structure, in bytes. You must set this member before calling GlobalMemoryStatusEx.
      ''' </summary>
      Public dwLength As UInt32
      ''' <summary>
      ''' Number between 0 and 100 that specifies the approximate percentage of physical memory that is in use (0 indicates no memory use and 100 indicates full memory use).
      ''' </summary>
      Public dwMemoryLoad As UInt32
      ''' <summary>
      ''' Size of unreserved and uncommitted memory in the extended portion of the virtual address space of the calling process, in bytes.
      ''' </summary>
      Public ullAvailExtendedVirtual As UInt64
      ''' <summary>
      ''' Size of available memory to commit, in bytes. The limit is ullTotalPageFile.
      ''' </summary>
      Public ullAvailPageFile As UInt64
      ''' <summary>
      ''' Size of physical memory available, in bytes.
      ''' </summary>
      Public ullAvailPhys As UInt64
      ''' <summary>
      ''' Size of unreserved and uncommitted memory in the user mode portion of the virtual address space of the calling process, in bytes.
      ''' </summary>
      Public ullAvailVirtual As UInt64
      ''' <summary>
      ''' Size of the committed memory limit, in bytes. This is physical memory plus the size of the page file, minus a small overhead.
      ''' </summary>
      Public ullTotalPageFile As UInt64
      ''' <summary>
      ''' Total size of physical memory, in bytes.
      ''' </summary>
      Public ullTotalPhys As UInt64
      ''' <summary>
      ''' Total size of the user mode portion of the virtual address space of the calling process, in bytes.
      ''' </summary>
      Public ullTotalVirtual As UInt64

End Class

User-Defined Field Types:

None.

Notes:

See
Documentation

Please edit this page!

Do you have...

  • helpful tips?
  • corrections to the existing content?
  • alternate definitions?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.

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