Mémoire Virtuelle d'un Process (Virtual Memory)

u147078 Messages postés 8 Date d'inscription mercredi 20 octobre 2004 Statut Membre Dernière intervention 14 mars 2011 - 9 déc. 2009 à 01:19
u147078 Messages postés 8 Date d'inscription mercredi 20 octobre 2004 Statut Membre Dernière intervention 14 mars 2011 - 9 mars 2011 à 13:34
Bonjour,

Je cherche à récuperer la Mémoire Virtuelle d'un Process donné.
J'ai essayé la fonction GetProcessMemoryInfo de la Lib "PSAPI.DLL" , mais les données renvoyées ne correspondent pas réellemnt à la Mémoire virtuelle.
Dans le TAskManager on retrouve un attrb nommé "Taille MV" ou "MV Size" mais correspond au "Private Bytes" de Process Explorer.
La valeur qui m'interesse c'est bien le Virtual Size de la Virtual Memory. C'est cette valeur qui, lorsqu'elle approche les 2 Go fait tomber le process de mon script.

Si vous savez comment récuperer cette info en VB6 pour un process donné.. merci de l'info.


Private Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long

2 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 déc. 2009 à 07:51
est-ce cela :

PrivateUsage
The current amount of memory that cannot be shared with other processes, in bytes. Private bytes include memory that is committed and marked MEM_PRIVATE, data that is not mapped, and executable pages that have been written to.

http://msdn.microsoft.com/en-us/library/ms684874(VS.85).aspx


sinon, VirtualQueryEx me semble une API assez appropriée


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
u147078 Messages postés 8 Date d'inscription mercredi 20 octobre 2004 Statut Membre Dernière intervention 14 mars 2011
9 mars 2011 à 13:34
Merci, la solution utilisée est la suivante :

'Objet WMI
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
'Recupération du process
sQuery "Select * from Win32_Process Where Name '" + sProcessName + "'"
Set colProcessList = objWMIService.ExecQuery(sQuery)
If colProcessList.Count = 0 Then
GetVirtualMemorySizeFromProcessName = 0
Else
For Each objProcess In colProcessList
If ModeProcessAlone = True Then
If colProcessList.Count = 1 Then
FindProcess = True
Exit For
Else
GetVirtualMemorySizeFromProcessName = 0
Exit Function
End If
End If
sProcessID = objProcess.ProcessId
If CLng(CurrentPID) CLng(sProcessID) Then FindProcess True: Exit For
Next

If FindProcess = True Then
sTemp = objProcess.VirtualSize
dMem = CDbl(sTemp) / 1024
GetVirtualMemorySizeFromProcessName = dMem
End If
End If
End Function
0
Rejoignez-nous