Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Virtuellen Speicher auslesen (https://www.delphipraxis.net/77571-virtuellen-speicher-auslesen.html)

Alex_ITA01 21. Sep 2006 10:59


Virtuellen Speicher auslesen
 
Hallo erstmal,
gibt es eine Möglichkeit, den virtuellen Speicher meiner Anwendung auszulesen.
Den normalen Speicherverbrauch kann ich auslesen aber ich benötige zusätzlich den virtuellen.
Wäre super wenn ihr mir helfen könntet.
MFG Alex

himitsu 21. Sep 2006 12:14

Re: Virtuellen Speicher auslesen
 
Also ich denke mal du ließt schon den virtuellen Speicher aus, denn an den Physischen kommst du eh nicht so einfach ran :zwinker:

Go2EITS 21. Sep 2006 13:12

Re: Virtuellen Speicher auslesen
 
Mit den Fingern kommst du an den physischen Speicher... :angel2:

Delphi-Quellcode:
 
var
memory: TMemoryStatus;
begin

//Memory ausgeben
memory.dwLength := SizeOf(memory);
GlobalMemoryStatus(memory);
x := memory.dwTotalPhys - memory.dwAvailPhys;
y := memory.dwTotalPhys;
Label1.Caption:=IntToStr(round((x/y)*100))+'% von '+inttostr(Round(y/1024))+' KB';
Das ist der freie phys. Speicher und gesamte physische Speicher. :-D
Da kommt man sehr wohl ran...
Ist da etwas virtuell? :gruebel:

himitsu 22. Sep 2006 18:54

Re: Virtuellen Speicher auslesen
 
Das was du/dein Programm sieht, ist der virtuelle Speicher :warn:

Windos verteil den physischen Speicher + die PageFile an die Programme und blendet Teile davon in deren virtuellen Speicher ein.

Oder hast du dich noch nie gefragt, warum z.B. deine Delphi-Programme immer (standardmäig) an der selben Adresse ($00400000..) liegen, selbst wenn mehrere gleichzeitig geladen sind?

Christian Seehase 22. Sep 2006 22:24

Re: Virtuellen Speicher auslesen
 
Moin Go2EITS,

hast Du Dir mal die anderen Teile von MEMORYSTATUS angesehen?
Z.b. dwTotalVirtual ;-)

Alex_ITA01 23. Sep 2006 15:11

Re: Virtuellen Speicher auslesen
 
Hallo,
also ich lese den Speicherverbrauch meiner Anwendung so aus:

Delphi-Quellcode:
  Wert  := 0;
  cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc, cb);
  pmc^.cb := cb;
  if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then
  begin
    Wert := pmc^.WorkingSetSize;
  end;
Ich will aber zusätzlich noch den virtuellen Speicher.
Im Taskmanager kann man sich ja noch eine Spalte zu jedem Prozess anzeigen lassen (Größe virtueller Speicher). Diesen Wert würde ich noch gerne haben wollen...
Danke schonmal.
MFG Alex

Alex_ITA01 25. Sep 2006 08:12

Re: Virtuellen Speicher auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo erstmal,
also MemoryStatus macht mich nicht ganz glücklich.
Ich benötige folgenden Wert, den der Taskmanager auch auslesen kann.

Siehe ScreenShot.
Ich hoffe ihr könnt mir da irgendwie helfen.
Wäre echt super, denn ich brauche den Wert...
MFG Alex
PS: Den ersten Wert (erste Spalte) habe ich bereits. Ich brauche NUR den zweiten

EWeiss 25. Sep 2006 08:24

Re: Virtuellen Speicher auslesen
 
Zitat:

Zitat von Alex_ITA01
Hallo erstmal,
also MemoryStatus macht mich nicht ganz glücklich.
Ich benötige folgenden Wert, den der Taskmanager auch auslesen kann.

Siehe ScreenShot.
Ich hoffe ihr könnt mir da irgendwie helfen.
Wäre echt super, denn ich brauche den Wert...
MFG Alex
PS: Den ersten Wert (erste Spalte) habe ich bereits. Ich brauche NUR den zweiten

Das kannst du erfahren über die Api GlobalMemoryStatus in verbindung
mit der Type MEMORYSTATUS

Hoffe das hilft weiter

Alex_ITA01 25. Sep 2006 08:27

Re: Virtuellen Speicher auslesen
 
Hallo,
MemoryStatus zeigt mir nur den virtuellen Speicher vom ganzen PC an.
dwTotalVirtual oder dwAvailVirtual.
Ich brauche aber den Verbrauch dieser Anwendung.
Geht das auch mit MemoryStatus? Wenn ja, wie? Ich bekomme es so nicht hin.
MFG Alex

EWeiss 25. Sep 2006 08:29

Re: Virtuellen Speicher auslesen
 
Zitat:

Zitat von Alex_ITA01
Hallo,
MemoryStatus zeigt mir nur den virtuellen Speicher vom ganzen PC an.
dwTotalVirtual oder dwAvailVirtual.
Ich brauche aber den Verbrauch dieser Anwendung.
Geht das auch mit MemoryStatus? Wenn ja, wie? Ich bekomme es so nicht hin.
MFG Alex

Sorry ich kann es dir nur als VB-BEispiel zeigen.
das sind alle Werte welche du über diese API erfahren kannst.

Delphi-Quellcode:
Public Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type
gruß

Alex_ITA01 25. Sep 2006 09:46

Re: Virtuellen Speicher auslesen
 
Ja, die Variablen in dem Record sind schön und gut, aber ich brauche nicht den virtuellen Speicher oder Pagefile oder sonstwas von dem kompletten PC!
Ich brauche nur den virtuellen Speicher für die Anwendung. Siehe Screenshot weiter oben.
Danke und MFG
Alex

EWeiss 25. Sep 2006 11:10

Re: Virtuellen Speicher auslesen
 
Zitat:

Zitat von Alex_ITA01
Ja, die Variablen in dem Record sind schön und gut, aber ich brauche nicht den virtuellen Speicher oder Pagefile oder sonstwas von dem kompletten PC!
Ich brauche nur den virtuellen Speicher für die Anwendung. Siehe Screenshot weiter oben.
Danke und MFG
Alex

Ja Sorry dann habe ich mich da etwas verschaut.(verlesen)

Gruß

Alex_ITA01 25. Sep 2006 11:14

Re: Virtuellen Speicher auslesen
 
Macht ja nichts,
MFG Alex

EWeiss 25. Sep 2006 11:41

Re: Virtuellen Speicher auslesen
 
Zitat:

Zitat von Alex_ITA01
Macht ja nichts,
MFG Alex

also hab da 4 einträge weiß aber jetzt nicht ob da auf anhieb etwas für dich dabei ist.

arr(count, 1) = CStr(pmc.WorkingSetSize)
arr(count, 2) = CStr((pmc.PeakWorkingSetSize))
arr(count, 3) = CStr((pmc.PagefileUsage))
arr(count, 4) = CStr((pmc.PeakPagefileUsage))

Das ist alles was meine Anwendung rausspuckt.

gruß noch mal.

Alex_ITA01 25. Sep 2006 12:58

Re: Virtuellen Speicher auslesen
 
Danke,
PageFileUsage war es :-)
MFG Alex

EWeiss 25. Sep 2006 13:30

Re: Virtuellen Speicher auslesen
 
Zitat:

Zitat von Alex_ITA01
Danke,
PageFileUsage war es :-)
MFG Alex

Wer suchet der findet :)
Wußte doch das ich so etwas in meiner Bibliothek hatte.

gruß ..


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz