В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
p/invoke путь РЕДАКТИРОВАНИЕ : Измененный на GlobalMemoryStatusEx для предоставления точных результатов (heh)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private 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(NativeMethods.MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
Тогда использование как:
ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{
installedMemory = memStatus.ullTotalPhys;
}
Или можно использовать WMI (управляемый, но медленнее) для запросов "TotalPhysicalMemory" в классе "Win32_ComputerSystem".
Редактирование зафиксированный код на комментарий с joel-llamaduck.blogspot.com
. У ГНИДЫ есть предел на сумму памяти, к которой она может получить доступ общего количества. Существует процент, и затем 2 ГБ в xp были твердым потолком.
у Вас могло быть 4 ГБ в нем, и это уничтожит приложение, когда это поразило 2 ГБ.
Также в режиме на 64 бита, существует процент памяти, которую можно использовать из системы, таким образом, я не уверен, можно ли попросить все это или если это конкретно предотвращено.
Вы могли использовать WMI. Найденный отрывком.
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
strMemory = objComputer.TotalPhysicalMemory
Next
Добавьте ссылку на Microsoft.VisualBasic.dll, как кто-то упомянул выше. Тогда получение общей физической памяти так же просто как это (да, я протестировал его):
static ulong GetTotalMemoryInBytes()
{
return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
}
Добавьте ссылку на Microsoft.VisualBasic
и using Microsoft.VisualBasic.Devices;
.
ComputerInfo
класс имеет всю информацию, в которой Вы нуждаетесь.
Если вы используете Mono, вам может быть интересно узнать, что Mono 2.8 (который будет выпущен позже в этом году) будет иметь счетчик производительности, который сообщает размер физической памяти на всех платформах, на которых работает Mono (включая Windows ). Вы можете получить значение счетчика, используя этот фрагмент кода:
using System;
using System.Diagnostics;
class app
{
static void Main ()
{
var pc = new PerformanceCounter ("Mono Memory", "Total Physical Memory");
Console.WriteLine ("Physical RAM (bytes): {0}", pc.RawValue);
}
}
Если вас интересует код C, который предоставляет счетчик производительности, его можно найти здесь .