2010-07-21 22 views

Respuesta

51

Utilice Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory.

Haga clic derecho en su proyecto, Agregar referencia, seleccione Microsoft.VisualBasic.

+0

¿Puedes llamar esto desde C#? –

+7

Es una clase .NET framework, disponible en cualquier versión desde 2.0. El nombre del espacio de nombres es irrelevante. –

+6

Esa es una mala solución ... :(No debería tener que agregar una referencia a VB para eso ... –

17

De EggHeadCafe tras Google para 'C# sistema de memoria'

Usted tendrá que añadir una referencia 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(); 
     } 
    } 
} 

Salida:

Espacio Total = 4033036

Memoria física total = 2095172

Memoria Virtual Total = 1933904

memoria virtual disponible = 116280

+23

Win32_LogicalMemoryConfiguration no está disponible desde Vista en adelante. Reemplace con CIM_OperatingSystem y use TotalVisibleMemorySize, TotalVirtualMemorySize, etc. en su lugar. El código anterior arroja una excepción en Win7 y probablemente en Vista también. – Canacourse

+3

A continuación del comentario de @ Canacourse, consulte: http://msdn.microsoft.com/en-us/library/aa387937(v=vs.85).aspx para obtener información sobre la clase CIM_OperatingSystem. –

21

Esta respuesta se basa en la de Hans Passant. La propiedad requerida es Available PhysicalMemory en realidad. y (e TotalPhysicalMemory y otros) son variables de instancia, por lo que debe ser

new ComputerInfo().AvailablePhysicalMemory 

Funciona en C#, pero me pregunto por qué this page dice que para C#, "no se admite este idioma o ningún ejemplo de código está disponible "

+5

Porque nadie quería para escribirlo ... – atamanroman

+0

fielding, jaja probablemente! – David

+2

No, porque es parte del espacio de nombres 'My' utilizado en Visual Basic! Not C# - Incluyendo este dll de Visual Basic expondrá estos atajos que tha Son muy agradables en VB.NET. Y las personas que entran en C# después de VB comienzan a perder eso. Buena respuesta +1 – ppumkin

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