Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Query available max memory (RAM)?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg114980] Re: Query available max memory (RAM)?
  • From: István Zachar <zac at freemail.hu>
  • Date: Sun, 26 Dec 2010 04:01:17 -0500 (EST)
  • References: <ieklmr$4t4$1@smc.vnet.net> <if1o94$pak$1@smc.vnet.net>

Thank you Alexey for the code, it does what it says.
Now I wonder why there is no built-in function for this in Mathematica?
Nevertheless, I'll use this solution until a better comes up, if there
exists one.

Thanks again
Istvan


On Dec 24, 10:14 am, Alexey <lehi... at gmail.com> wrote:
> On 19 =D0=B4=D0=B5=D0=BA, 13:10, Istv=C3=A1n Zachar <z...=
@freemail.hu> wrot=
> e:
>
> > Dear Group,
>
> > is there a way to get data on the actual available max RAM in a
> > Windows system? With SystemInformation and Environment I was unable to
> > obtain this information.
>
> > Istvan
>
> You can use NETLink for this (it requires .NET version 2 or later to
> be installed). You can get all memory-related information directly
> from kernel32.dll (on 32-bit Windows systems). This is the fastest and
> the most effective way.
>
> For example, the following defines a function 'freePhysicalMemory'
> that returns the current amount of free physical memory in bytes:
>
> Needs["NETLink`"]
>
> Module[{before(*,globalMemoryStatusEx,memorystatusex*)},
>   before = LoadedNETTypes[];
>   globalMemoryStatusEx = DefineDLLFunction[
>     "[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
>     public class MEMORYSTATUSEX
>     {public uint dwLength;
>     public uint dwMemoryLoad;
>     public ulong ullTotalPhys;
>     public ulong ullAvailPhys;
>     public ulong ullTotalPageFile;
>     public ulong ullAvailPageFile;
>     public ulong ullTotalVirtual;
>     public ulong ullAvailVirtual;
>     public ulong ullAvailExtendedVirtual;
>     public MEMORYSTATUSEX()
>     {this.dwLength = (uint)
>     Marshal.SizeOf(typeof( MEMORYSTATUSEX ));}}
>     [return: MarshalAs(UnmanagedType.Bool)]
>     [DllImport(\"kernel32.dll\", CharSet=CharSet.Auto, \
> SetLastError=true)]
>     public static extern bool GlobalMemoryStatusEx([In, Out] \
> MEMORYSTATUSEX lpBuffer);"
>     ];
>   memorystatusex = Complement[LoadedNETTypes[], before][[1, 1]];
>   memorystatusex = memorystatusex <> "+MEMORYSTATUSEX";
>   memorystatusex = NETNew[memorystatusex];
>   Block[{ullAvailPhys},
>    freePhysicalMemory :=
>     If[globalMemoryStatusEx[memorystatusex],
>      memorystatusex@ullAvailPhys, $Failed]]];
>
> You can easily get all other memory-related information:
>
> list = {{dwLength,
>     "The size of the structure, in bytes. You must set this member \
> before calling GlobalMemoryStatusEx."}, {dwMemoryLoad,
>     "A 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)."}, {ullTotalPhys,
>     "The amount of actual physical memory, in bytes."}, {ullAvailPhys=
,
>      "The amount of physical memory currently available, in bytes. =
\
> This is the amount of physical memory that can be immediately reused \
> without having to write its contents to disk first. It is the sum of \
> the size of the standby, free, and zero lists."}, {ullTotalPageFile,
>     "The current committed memory limit for the system or the current
> \
> process, whichever is smaller, in bytes. To get the system-wide \
> committed memory limit, call GetPerformanceInfo."}, {ullAvailPageFile,
>      "The maximum amount of memory the current process can commit, =
in
> \
> bytes. This value is equal to or smaller than the system-wide \
> available commit value. To calculate the system-wide available commit
> \
> value, call GetPerformanceInfo and subtract the value of CommitTotal \
> from the value of CommitLimit."}, {ullTotalVirtual,
>     "The size of the user-mode portion of the virtual address space \
> of the calling process, in bytes. This value depends on the type of \
> process, the type of processor, and the configuration of the \
> operating system. For example, this value is approximately 2 GB for \
> most 32-bit processes on an x86 processor and approximately 3 GB for \
> 32-bit processes that are large address aware running on a system \
> with 4-gigabyte tuning enabled."}, {ullAvailVirtual,
>     "The amount of unreserved and uncommitted memory currently in the
> \
> user-mode portion of the virtual address space of the calling \
> process, in bytes."}, {ullAvailExtendedVirtual,
>     "Reserved. This value is always 0."}};
> globalMemoryStatusEx[memorystatusex];
> {Tooltip[#[[1]], Style[#[[2]], 22]] & /@ list,
>    memorystatusex /@ list[[All, 1]]} // Transpose // TableForm



  • Prev by Date: Re: Mathematica daily WTF
  • Next by Date: Re: Counting
  • Previous by thread: Re: Query available max memory (RAM)?
  • Next by thread: Help For OpenCLFractalRender