Entwickler-Ecke

Windows API - Ram auslastung


ethillias - Mi 10.12.08 00:22
Titel: Ram auslastung
Hi,

ich versuche gerade meinen Arbeitsspeicher, bzw den noch freien Arbeitsspeicher mir anziegen zu lassen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  memory: Tmemorystatus;
begin
  memory.dwLength := SizeOf(memory);
  GlobalMemoryStatus(memory);
  //Arbeitsspeicher
  edit1.text:=IntToStr(Memory.dwTotalPhys div (1024*1024));
  //Freier Arbeitsspeicher
  edit2.text:=IntToStr(Memory.dwAvailPhys div (1024*1024));
end;


Das ergebniss ist aber irgentwie unglaubwürdig:

Ich habe bei beiden eine Ausgabe von 1023...

Eig. habe ich 4gb ram und im moment verbrauche ich 35% davon, laut Windoof.

Was mach ich falsch?


Delete - Mi 10.12.08 10:15
Titel: Re: Ram auslastung
user profile iconethillias hat folgendes geschrieben Zum zitierten Posting springen:
Was mach ich falsch?

Du liest nicht die Hilfe:
Windows SDK hat folgendes geschrieben:
On computers with more than 4 GB of memory, the GlobalMemoryStatus function can return incorrect information. Windows 2000 and later report a value of -1 to indicate an overflow. Earlier versions of Windows NT report a value that is the real amount of memory, modulo 4 GB. For this reason, use the GlobalMemoryStatusEx function instead.

Und du überprüfst nicht den Rückgabewert.


ethillias - Mi 10.12.08 11:18

ok danke für den tipp werde das gleich testen.

Hmm also irgentwie bekomm ich das grad nicht hin kannste mir sagen was ich da ändern muss? in meiner Hilfe kann ich auch kein GlobalMemorystatusEX finden.


jfheins - Mi 10.12.08 11:26

Du musst nur in der richtigen Hilfe suchen :P

z.B. so: http://search.live.com/results.aspx?q=GlobalMemorystatusEX&form=STOHSS

Die richtige Hilfe ist das msdn/windows-sdk

Evtl. hilfreich ist der Post aus der DP (der interessanterweise noch vor dem Microsoft-treffer kommt ...)


ethillias - Mi 10.12.08 11:37

Habe mir bei deinem link mal den post von Lucky angeguckt, verstehe dort aber nichtwas

TMemoryStatusEx = packed record

bedeuten soll.

wenn ich das versuche einfach zu übernehmen bekomm ich nen Fehler das er eig. einen : erwartet und wenn ich das änder meckert er über das packed.

Vielleicht bin ich schwer von Begriff^^.

Hab aber jetzt erstma Unterricht, später wieder da.


Delete - Mi 10.12.08 11:47

Ich kann es einfach in ein neues Projekt kopieren und es läuft.


Xentar - Mi 10.12.08 11:56

Du musst das auch an die richtige Stelle kopieren..
was du da hast, ist ein TYPE.
Ich vermute mal, du hast es im Moment irgendwoe unter VAR stehen - das geht nicht.


ethillias - Mi 10.12.08 14:57

Ich hab das dort drin wo ich meine das es hinkommt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, ColorButton, Ping, WinSock, Gauges,
  TextTrayIcon, CoolTrayIcon, Menus;

const
  SyncPing  = 0;
  AsyncPing = 1;

type
  TDesktopManager = class(TForm)
    TMemoryStatusEx = packed record;


Ergebniss: Expected ':' but '=' found.


jaenicke - Mi 10.12.08 15:03

Die Deklaration gehört nicht in eine andere hinein...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TMemoryStatusEx = packed record

  end;

  TDesktopManager = class(TForm)
  private
  public
  end;


ethillias - Mi 10.12.08 15:11

Ok danke wusste ich nicht, habs hinbekommen.