Connaître la quantité de mémoire utilisée par une exe

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Connaître la quantité de mémoire utilisée par une exe

Message par microdevweb »

Bonjour à tous,

Je suis sur le point de livré un programme à un client et peaufine les derniers détails. Mais me voici confronté à un petit problème.

Exemple:

Le programme démarre avec 5 Mo de mémoire occupée et la fenêtre principale ouverte, j'ouvre une fenêtre qui utilise plusieurs modules de mon RAD il passe à 6,2 Mo (normal) je ferme la fenêtre il passe 5,5 Mo. J'ai donc 0,5 Mo mangé par un de mes modules.

Pour me permettre de solutionné ce problème existe-t-il un fonction qui retourne la mémoire occupée par un exécutable.

Merci d'avance
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Connaître la quantité de mémoire utilisée par une exe

Message par microdevweb »

Je ne sais pas si c'est la solution, mais voici un petit module inspiré d'une réponse du forum anglais
  • PageFaultCount -->Nombre d'erreurs de page
  • PeakWorkingSetSize -->Utilisation max de la mémoire RAM
  • WorkingSetSize --> Utilisation de la mémoire RAM
  • QuotaPeakPagedPoolUsage -->
    Utilisation max de la mémoire paginée
  • QuotaPagedPoolUsage --> Utilisation de la mémoire paginée
  • QuotaPeakNonPagedPoolUsage
  • QuotaNonPagedPoolUsage
  • PagefileUsage --> Utilisation de la mémoire virtuelle
  • PeakPagefileUsage --> Utilisation max de la mémoire virtuelle

Code : Tout sélectionner

; *********************************************************************************************
; original code author              : netmaestro
; Adaptation for Pb 5.60            : Bisonte
; Module is making by               : MicrodevWeb
; *********************************************************************************************
DeclareModule MemoryInfo
  Declare Get(processID,note.s) 
EndDeclareModule
Module MemoryInfo
  Prototype GetProcessMemoryInfo( hProcess, address, size )
  Procedure Get(processID,note.s) 
    Protected hProcess.i
    Protected pmc.PROCESS_MEMORY_COUNTERS
    Protected psapi = OpenLibrary(#PB_Any, "psapi.dll")
    Protected GetProcessMemoryInfo_.GetProcessMemoryInfo = GetFunction(psapi, "GetProcessMemoryInfo")
    Protected Text.s
    hProcess = OpenProcess_(  #PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, processID )
    If (hProcess=0)
      ProcedureReturn
    EndIf
    ; Print the process identifier.
    ; Print information about the memory usage of the process.
    If GetProcessMemoryInfo_( hProcess, @pmc, SizeOf(pmc))
      If note<>""
        Text="---------------------------------------------------------------------------"+Chr(10)+
             "   "+note+Chr(10)+
             "---------------------------------------------------------------------------"+Chr(10)
      Else
        Text=""
      EndIf
      Text+"Process ID                                        : " +Str(processID)+Chr(10)+
           "---------------------------------------------------------------------------"+Chr(10)+
           "PageFaultCount                                : " + Str(pmc\PageFaultCount)+Chr(10)+
           "PeakWorkingSetSize                        : " + Str(pmc\PeakWorkingSetSize)+Chr(10)+
           "WorkingSetSize                                : " +Str(pmc\WorkingSetSize)+Chr(10)+
           "QuotaPeakPagedPoolUsage            : " +Str(pmc\QuotaPeakPagedPoolUsage)+Chr(10)+
           "QuotaPagedPoolUsage                    : " +Str(pmc\QuotaPagedPoolUsage)+Chr(10)+
           "QuotaPeakNonPagedPoolUsage     : " +Str(pmc\QuotaPeakNonPagedPoolUsage)+Chr(10)+
           "QuotaNonPagedPoolUsage             : " +Str(pmc\QuotaNonPagedPoolUsage)+Chr(10)+
           "PagefileUsage                                  : " +Str(pmc\PagefileUsage)+Chr(10)+
           "PeakPagefileUsage                          : " +Str(pmc\PeakPagefileUsage)+Chr(10)+
           "---------------------------------------------------------------------------"+Chr(10)
      Debug Text
    EndIf
    CloseHandle_( hProcess )
    CloseLibrary(psapi)
  EndProcedure
  
  Global NewList *myMemories()
  
  Procedure EventAddMemory()
    AddElement(*myMemories())
    *myMemories()=AllocateMemory(50000)
    MemoryInfo::Get(GetCurrentProcessId_(),"Add 1024 to memory")
  EndProcedure
  Procedure EventClearAll()
    ForEach *myMemories()
      FreeMemory(*myMemories())
    Next
    ClearList(*myMemories())
    MemoryInfo::Get(GetCurrentProcessId_(),"Clear memory")
  EndProcedure
  OpenWindow(0,0,0,800,600,"Testing",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ButtonGadget(0,100,265,600,30,"Add element")
  ButtonGadget(1,100,300,600,30,"Clear all")
  BindGadgetEvent(0,@EventAddMemory())
  BindGadgetEvent(1,@EventClearAll())
  MemoryInfo::Get(GetCurrentProcessId_(),"Window is open")
  Repeat
    WaitWindowEvent()
  Until Event()=#PB_Event_CloseWindow
EndModule
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre