Как Вы получаете общую сумму RAM, которую имеет компьютер?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

77
задан David Refoua 30 April 2016 в 16:11
поделиться

6 ответов

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

59
ответ дан Igor Brejc 24 November 2019 в 10:41
поделиться

. У ГНИДЫ есть предел на сумму памяти, к которой она может получить доступ общего количества. Существует процент, и затем 2 ГБ в xp были твердым потолком.

у Вас могло быть 4 ГБ в нем, и это уничтожит приложение, когда это поразило 2 ГБ.

Также в режиме на 64 бита, существует процент памяти, которую можно использовать из системы, таким образом, я не уверен, можно ли попросить все это или если это конкретно предотвращено.

0
ответ дан hardkoded 24 November 2019 в 10:41
поделиться

Вы могли использовать 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
4
ответ дан jrh 24 November 2019 в 10:41
поделиться

Добавьте ссылку на Microsoft.VisualBasic.dll, как кто-то упомянул выше. Тогда получение общей физической памяти так же просто как это (да, я протестировал его):

static ulong GetTotalMemoryInBytes()
{
    return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
}
59
ответ дан Ryan Lundy 24 November 2019 в 10:41
поделиться

Добавьте ссылку на Microsoft.VisualBasic и using Microsoft.VisualBasic.Devices;.

ComputerInfo класс имеет всю информацию, в которой Вы нуждаетесь.

174
ответ дан Danny Beckett 24 November 2019 в 10:41
поделиться

Если вы используете 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, который предоставляет счетчик производительности, его можно найти здесь .

29
ответ дан 24 November 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: