2010-07-21 21 views

risposta

51

Utilizzare Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory.

Fare clic con il tasto destro del mouse sul progetto, Aggiungi riferimento, selezionare Microsoft.VisualBasic.

+0

puoi chiamare questo da C#? –

+7

È una classe di framework .NET, disponibile in qualsiasi versione dal 2.0. Il nome dello spazio dei nomi è irrilevante. –

+6

Questa è una pessima soluzione ... :(Non dovrei aggiungere un riferimento a VB per questo ... –

17

Da EggHeadCafe dopo googling per 'c memoria di sistema #'

Sarà necessario aggiungere un riferimento a System.Management

using System; 
using System.Management; 

namespace MemInfo 
{ 
    class Program 
    {  
     static void Main(string[] args) 
     { 
      ObjectQuery winQuery = new ObjectQuery("SELECT * FROM Win32_LogicalMemoryConfiguration"); 

      ManagementObjectSearcher searcher = new ManagementObjectSearcher(winQuery); 

      foreach (ManagementObject item in searcher.Get()) 
      { 
       Console.WriteLine("Total Space = " + item["TotalPageFileSpace"]); 
       Console.WriteLine("Total Physical Memory = " + item["TotalPhysicalMemory"]); 
       Console.WriteLine("Total Virtual Memory = " + item["TotalVirtualMemory"]); 
       Console.WriteLine("Available Virtual Memory = " + item["AvailableVirtualMemory"]); 
      } 
      Console.Read(); 
     } 
    } 
} 

uscita:

Total Space = 4033036

Memoria fisica totale = 2095172

Memoria virtuale totale = 1933904

Memoria virtuale disponibile = 116280

+23

Win32_LogicalMemoryConfiguration non è disponibile da Vista in poi. Sostituire con CIM_OperatingSystem e utilizzare TotalVisibleMemorySize, TotalVirtualMemorySize ecc. Il codice sopra genera un'eccezione su Win7 e probabilmente anche su Vista. – Canacourse

+3

In seguito al commento di @ Canacourse, consultare: http://msdn.microsoft.com/en-us/library/aa387937(v=vs.85).aspx per informazioni sulla classe CIM_OperatingSystem. –

21

Questa risposta è basata su Hans Passant. La proprietà richiesta è AvailablePhysicalMemory in realtà. e (e TotalPhysicalMemory e altri) sono variabili di istanza, quindi dovrebbe essere

new ComputerInfo().AvailablePhysicalMemory 

Funziona in C#, ma mi chiedo perché this page dice che per C#, "Questo linguaggio non è supportato o nessun esempio di codice è disponibile ".

+5

Perché nessuno voleva per scriverlo .. – atamanroman

+0

fielding, haha ​​probabilmente! – David

+2

No perché la sua parte del 'My' Namespace utilizzata in Visual Basic! Not C# - Includendo questa dll di Visual Basic esporrai queste scorciatoie sono così carini in VB.NET; E le persone che vanno in C# dopo VB iniziano a mancare. Bella risposta +1 – ppumkin

5
var performance = new System.Diagnostics.PerformanceCounter("Memory", "Available MBytes"); 
var memory = performance.NextValue(); 
Problemi correlati