2009-10-02 7 views
0

J'ai une question à propos de la propriété TotalVirtualMemory dans la classe VB ComputerInfo. J'ai vérifié cette propriété du code sur plusieurs ordinateurs différents et le nombre est toujours 2047 MB. C'est étrange car je sais pertinemment que la mémoire virtuelle sur ces ordinateurs diffère (~ 1Go, ~ 2Go et ~ 3.5Go). Est-ce que quelqu'un sait pourquoi c'est comme ça et y a-t-il un autre moyen d'obtenir la mémoire virtuelle totale et disponible?ComputerInfo.TotalVirtualMemory n'est pas correct

Cordialement Daniel

Répondre

4

Vous pouvez utiliser WMI pour obtenir des informations de la mémoire:

ManagementObjectSearcher mgmtObjects = new ManagementObjectSearcher("Select * from Win32_OperatingSystem"); 

    foreach (var item in mgmtObjects.Get()) 
    { 
     Console.WriteLine("FreeVirtualMemory:" + item.Properties["FreeVirtualMemory"].Value); 
     Console.WriteLine("TotalVirtualMemorySize:" + item.Properties["TotalVirtualMemorySize"].Value); 
    } 
+0

Cela fonctionne comme un charme si vous changez "Win32_ComputerSystem" en "Win32_OperatingSystem" comme Martin dit ci-dessous. Merci! –

0

Je ne sais pas, mais il arrive en tête probablement à la mémoire maximale qu'un programme 32 bits peut allouer (2 Go). Avez-vous essayé de le tester sur une machine 64 bits?

+0

Ce n'est pas la mémoire maximale qu'un programme 32 bits peut * allouer *, c'est la mémoire maximale qu'un programme 32 bits peut mapper dans son * espace d'adressage * en même temps. – OregonGhost

2

Cela pourrait être un cas où WMI fournira les informations correctes pour vous. Avoir une navigation autour des objets disponibles utilisant Scriptomatic, l'objet Win32_PageFile pourrait contenir ce que vous recherchez.

Éditer: C'est Win32_OperatingSystem, pas Win32_ComputerSystem, mais sinon le code de Tom Frey est correct.

+0

ups, vous avez raison, merci de souligner cela – TJF

2

TotalVirtualMemory ne renvoie pas la quantité de mémoire virtuelle sur l'ordinateur. Au contraire, il renvoie l'espace d'adressage virtuel disponible pour le programme.

Cela sera presque toujours de 2 Go, ce qui correspond à la quantité d'espace allouée à un programme d'exploitation par Windows (au moins par win32). Pour plus d'informations sur Virtual Address Space, vous pouvez consulter "Advanced Windows" par Jeffrey Richter, qui va dans beaucoup plus de détails.

Pour obtenir ces informations, vous pouvez ajouter une référence à System.Management.dll et exécuter ce

System.Management.ManagementObject logicalMemory = new 
    System.Management.ManagementObject("Win32_LogicalMemoryConfiguration.Name=\"LogicalMemoryConfiguration\""); 

Console.WriteLine("Total virtual memory: {0}",logicalMemory["TotalVirtualMemory"].ToString()); 

Sur mon système de travail, cette commande affiche 2809756.

Cet objet prend également en charge ces propriétés

uint32 AvailableVirtualMemory; //in Kb 
    string Caption; 
    string Description; 
    string Name;     //NO LONGER SUPPORTED 
    string SettingID; 
    uint32 TotalPageFileSpace;  //in Kb 
    uint32 TotalPhysicalMemory;  //in Kb 
    uint32 TotalVirtualMemory;  //in Kb 

J'espère que cela aide.

Questions connexes