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
Connaître la quantité de mémoire utilisée par une exe
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Connaître la quantité de mémoire utilisée par une exe
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- 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
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
Work at Centre Spatial de Liège