Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Speicherauslastung unter .NET (https://www.delphipraxis.net/93931-speicherauslastung-unter-net.html)

mumu 13. Jun 2007 14:06


Speicherauslastung unter .NET
 
Wie kann ich die Speicherauslastung eines Prozesses mit dem Microsoft .NET Framework auslesen? Ich möchte wissen, wie viel Speicher eine Applikation im Moment tatsächlich benötigt. (incl. ausgelagertem Speicher auf der Festplatte)

jemand ne idee?

danke schonmal

mumu 13. Jun 2007 19:38

Re: Speicherauslastung unter .NET
 
es gibt ja von windows so Leistungsindikatoren, die man auslesen kann. welcher davon beschreibt am besten die Arbeitsspeicherauslastung innerhalb eines gewissen Zeitraums? auf einem server läuft nämlich ein prozess, den ich überwache. und je nachdem welche operation ich ausführ, möchte ich wissen, wo mehr arbeitsspeicher benötigt wird.

versteh jemand überhaupt was ich mein :-)

mumu 14. Jun 2007 10:45

Re: Speicherauslastung unter .NET
 
ich bin bei meinen Nachforschungen auf folgende Funktion gekommen: GetWsChanges bzw. InitializeProcessForWsWatch.

Meint ihr dass ist ein guter Indikator dafür, wie viel Speicher ein Process in einer gewissen Zeit benötigt hat???

Gibt es sowas wie diese Funktionen bereits im .NET Framework? oder wie binde ich diese Psapi Dll in mein .NET Project ein verwende diesen win32-code???

wär klasse, wenn mir da jemand helfen könnte...

OregonGhost 14. Jun 2007 10:51

Re: Speicherauslastung unter .NET
 
Eventuell ist der System.Diagnostics.PerformanceCounter etwas für dich. Das ist nämlich gerade die Kapselung der Leistungsindikatoren.

Edit: Jetzt weiß ich auch, warum ich das Gefühl hatte, dir das schonmal geschrieben zu haben. Ich hab nämlich genau das gleiche in deinem Thread zur CPU-Auslastung unter .NET geschrieben :roll:

mumu 14. Jun 2007 11:44

Re: Speicherauslastung unter .NET
 
hehe ja :-), da hast du mir auch schon den Tipp mit dem PerformanceCounter gegeben. Bloß ich hab irgendwie schon alle PerformanceCounter durchgeschaut, aber ich weiß nicht welcher davon Sinn macht. Ich würde halt gern wissen, wie viele Speicherzugriffe innerhalb einer gewissen Zeitspanne gemacht wurden, damit ich vergleichen kann, wann mehr auf dem Speicher zugegriffen werden musste...

OregonGhost 14. Jun 2007 11:47

Re: Speicherauslastung unter .NET
 
Ich glaube, diese Geschichte mit der Zeitspanne können die Performance Counter von sich aus. Vielleicht hilft dir der Artikel "How to: Retrieve Performance Counter Samples" aus dem Windows SDK weiter. Wirklich fit bin ich damit auch nicht, ich bin nur regelmäßig bei der Suche nach dem Windows Performance Counter (QueryPerformanceCounter und so) immer wieder fälschlicherweise darauf gestoßen und Opfer meiner Neugier geworden :mrgreen:

mumu 14. Jun 2007 12:06

Re: Speicherauslastung unter .NET
 
eigentlich gibt es nur so performancecounter, welche die anzahl an lese und schreibvorgänge für auf der festplatte ausgelagerte memory blöcke zählen. ich möchte aber allgemein alle speicherzugriffe zählen... geht das?

Phoenix 14. Jun 2007 12:18

Re: Speicherauslastung unter .NET
 
Zitat:

Zitat von mumu
ich möchte aber allgemein alle speicherzugriffe zählen... geht das?

Nein. Warum? Schau mal:

1. = Speicherzugriff
2. = Speicherzugriff wird gezählt
3. = Neuer Wert Anzahl Speicherzugriffe muss wohin geschrieben werden ->
4. = Speicherzugriff aufgrund der Wertänderung
5. = Huch.. der muss ja gezählt werden
6. = Ich hab den alten Wert zwar noch nicht geschrieben, aber der neuer Wert muss jetzt dennoch weggeschrieben werden
7. = Speicherzugriff aufgrund der Wertänderung durch die Wertänderung
und so weiter und so fort.

-> Kann gar nicht gehen. ;-)


Edit: Halbes Wort vergessen :oops:

mumu 14. Jun 2007 12:24

Re: Speicherauslastung unter .NET
 
hmm wenn ichs mir recht überleg, ist das wirklich einleuchtend :-) danke für den hinweis :-)

nur was zählt man dann am besten? die Anzahl an Zugriffe auf ausgelagerte Speicherblöcke? ich möchte halt irgendwie ein Maß, dass mir sagt, wann der Prozess mehr zu tun hatte.

es geht um folgendes Szenario. Der Prozess erhält Nachrichten in einer bestimmten Größe (z.B. 1 MB bis 100 MB) und ich möchte halt wissen, um wie viel der Faktor an Speicherauslastung bzw. -zugriffen steigt, wenn ich beispielsweise eine 10mal so große Nachricht verarbeite. Dann kann es eben sein, dass der Prozess jedoch 100 mal so viel Speicherzugriffe benötigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr.

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