none
Wie kann ich die Arbeitsspeicherinformationzustand abfragen wie in Task Manager? RRS feed

  • Frage

  • In meiner Software möchte ich folgende Information anzuzeigen...
    Arbeitssatz(Speicher) und Zugesicherte Größe habe ich über die Function GetProcessMemoryInfo bekommen.

    1. ist WorkingSetSize, 2. ist PrivateUsage

    Wie kann ich Arbeitsspeicher (privater Arbeitssatz) kriegen?

    Dienstag, 20. November 2018 12:14

Alle Antworten

  • Hi,

    wenn dir klar ist, dass das immer nur eine Momentaufnahme ist (der Wert kann sich jederzeit ändern), dann bspw. so:

    PerformanceCounter pc = new PerformanceCounter( "Process", "Working Set - Private", Process.GetCurrentProcess().ProcessName );
    Console.WriteLine( $"{pc.RawValue / 1024} KB" );
    

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 20. November 2018 12:23
    Moderator
  • Hi, Steffen... danke erst mal für eine schnelle Antwort

    ähnliche Beispiel habe ich schon mal gegoogelt, brauche aber ohne .NET

    Gib es WinAPI dafur?

    also in GetProcessMemoryInfo habe ich kein RawValue Property

      TProcessMemoryCountersEx = Packed Record
        cb: DWORD;
        PageFaultCount: DWORD;
        PeakWorkingSetSize: DWORD;
        WorkingSetSize: DWORD;
        QuotaPeakPagedPoolUsage: DWORD;
        QuotaPagedPoolUsage: DWORD;
        QuotaPeakNonPagedPoolUsage: DWORD;
        QuotaNonPagedPoolUsage: DWORD;
        PagefileUsage: DWORD;
        PeakPagefileUsage: DWORD;
        PrivateUsage: DWORD;
      End;

    • Bearbeitet EDIsaev Dienstag, 20. November 2018 12:39
    Dienstag, 20. November 2018 12:30
  • Hi,

    welche Sprache denn sonst?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 20. November 2018 13:28
    Moderator
  • Delphi, aber wenn es über WinAPI geht, Sprache ist nicht wichtig
    Dienstag, 20. November 2018 13:44
  • Delphi, aber wenn es über WinAPI geht, Sprache ist nicht wichtig

    WinApi ist nicht meine Welt. Aber eine kurze Google Suche führte mich hierhin:

      Working Set Information

    Das sieht eigentlich so aus als würden dort irgendwo tief versteckt die Informationen zu finden sein, die Du suchst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 20. November 2018 15:05
    Moderator
  • Hmm... meinst du von dem Array zu kumulieren? kann man probieren
    Dienstag, 20. November 2018 15:17
  • Hmm... meinst du von dem Array zu kumulieren?

    Keine Ahnung :) Wie gesagt, WinApi ist nicht meine Welt.

    Wenn .NET keine Option ist, würde ich WMI nehmen, das sollte wohl auch aus Delphi heraus möglich sein.

      Win32_PerfRawData_PerfProc_Process class

    Und dort die Eigenschaft WorkingSetPrivate abfragen. (Steht in der Doku nicht drin, ist aber dennoch vorhanden).

    Ein Codebeispiel in C# zum abfragen der Daten sieht bspw. so aus:

    ManagementScope scope = new ManagementScope( @"\\.\ROOT\cimv2" );
    ObjectQuery query = new ObjectQuery( "SELECT * FROM Win32_PerfRawData_PerfProc_Process Where Name = \"<NameDeinesProzesses>\"" );
    ManagementObjectSearcher searcher = new ManagementObjectSearcher( scope, query );
    ManagementObjectCollection queryCollection = searcher.Get();
    
    foreach ( ManagementObject item in queryCollection )
    {
        double workingSetPrivate = 0;
        Double.TryParse( item[ "WorkingSetPrivate" ].ToString(), out workingSetPrivate );
        Console.WriteLine( "Process: {0} - WorkingSetPrivate : {1} KB", item[ "Name" ], workingSetPrivate / 1024 );
    }

    Wie Du das jetzt in Delphi umsetzen kannst, weiß ich nicht. WMI Abfragen sollten aber, soweit ich das bei Tante Google nachlesen konnte, problemlos möglich sein.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 20. November 2018 16:46
    Moderator
  • In meiner Software möchte ich folgende Information anzuzeigen...
    Arbeitssatz(Speicher) und Zugesicherte Größe habe ich über die Function GetProcessMemoryInfo bekommen.

    1. ist WorkingSetSize, 2. ist PrivateUsage

    Wie kann ich Arbeitsspeicher (privater Arbeitssatz) kriegen?

    GetProcessMemoryInfo gibt dir alle genannten Informationen auch über PrivateUsage. Du musst nur die PROCESS_MEMORY_COUNTERS_EX Struktur verwenden.

    Weiteres kann noch über die Performance Counter API ermittelt werden.


    - Gruß Florian



    Mittwoch, 21. November 2018 09:49