Ermitteln wieviel Speicher ein Programm gerade verbraucht ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Ermitteln wieviel Speicher ein Programm gerade verbraucht ?

Beitrag von Bisonte »

Hallo...

Wie kann ich ermitteln, wieviel Speicher gerade ein Programm im RAM belegt ?
Ich meine so wie es der Taskmanager anzeigt unter "Arbeitsspeicher".

Ziel ist eine Anzeige z.B. wieviel MB Speicher z.B. der PluginContainer des Firefox belegt.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von RSBasic »

http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Wenn du stattdessen einen anderen Prozess ermitteln möchtest, kannst du das auch machen. Du brauchst nur die PID-Nummer des jeweil. Prozesses.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von Bisonte »

Ich wollt gerade posten, dass ich was gefunden habe ;)

Nunja, dein Code aus deiner WinApi Lib klappt leider nicht, da nicht das richtige handle ermittelt wird.
Es fehlt irgendwie das OpenProcess_()...
Ich hab da einen Code im englischen Forum von NetMaestro gefunden, der deinem ähnelt.

Ich hab ihn ein wenig modifiziert, und heraus kam folgendes :

Code: Alles auswählen

Structure PROCESS_MEMORY_COUNTERS
  cb.l
  PageFaultCount.l
  PeakWorkingSetSize.i
  WorkingSetSize.i
  QuotaPeakPagedPoolUsage.i
  QuotaPagedPoolUsage.i
  QuotaPeakNonPagedPoolUsage.i
  QuotaNonPagedPoolUsage.i
  PagefileUsage.i
  PeakPagefileUsage.i
EndStructure

Prototype GetProcessMemoryInfo( hProcess, address, size )

Procedure.i GetMemoryUsage(PID.i)
  
  Protected hProcess.i, Result.i = 0, psapi.i
  Protected pmc.PROCESS_MEMORY_COUNTERS
  Protected GetProcessMemoryInfo_.GetProcessMemoryInfo
  
  If PID
    hProcess = OpenProcess_(  #PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, PID )
    If (hProcess=0)
      ProcedureReturn 0
    EndIf
    psapi = OpenLibrary(#PB_Any, "psapi.dll")
    If psapi
      GetProcessMemoryInfo_.GetProcessMemoryInfo = GetFunction(psapi, "GetProcessMemoryInfo")
      If GetProcessMemoryInfo_( hProcess, @pmc, SizeOf(pmc))
        Result.i = pmc\WorkingSetSize  
      EndIf
      CloseLibrary(psapi)
    Else
      ProcedureReturn 0  
    EndIf
    ProcedureReturn Result  
  EndIf

EndProcedure
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von bobobo »

‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von NicTheQuick »

Falls der Hintergrund der Frage der meist immense Speicherverbrauch des Firefoxs ist, könnte dieser Artikel auch noch interessant für dich sein: Firefox-Entwickler reduzieren Speicherverbrauch
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von Bisonte »

NicTheQuick hat geschrieben:Falls der Hintergrund der Frage der meist immense Speicherverbrauch des Firefoxs ist, könnte dieser Artikel auch noch interessant für dich sein: Firefox-Entwickler reduzieren Speicherverbrauch
Nunja Firefox war nur ein Beispiel... genaugenommen ist es für einen sehr schlecht programmierten Client eines MMORPG,
der sich laufend Ram zubunkert und dann bei erreichten 2GB abschmiert...
Daher eine kleine Warnung bei 1,8GB und der Client kann kontrolliert beendet werden...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von NicTheQuick »

Klingt ja stark nach einem Speicherleck. Da wäre vielleicht ein Bugreport an den Entwickler hilfreich.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von RSBasic »

Soweit ich weiß bekommt jede 32 Bit-Anwendung nur maximal 2 GB-Adressraum. Aber ob das Abstürzen normal ist, weiß ich nicht.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Ermitteln wieviel Speicher ein Programm gerade verbrauch

Beitrag von PMV »

Natürlich ist das normal, wenn keine Überprüfung eingebaut wurde,
ob Speicher reserviert werden konnte oder nicht. :lol:

Ich sag nur: IMA 8)
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten