Einzelnen Beitrag anzeigen

Regan

Registriert seit: 27. Apr 2007
48 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: ETS - Der ExeTimeSaver #28

  Alt 18. Feb 2009, 15:17
Zitat von himitsu:
Dein Programm wird nur als 2GB-Version erstellt ... du mußt da nachträglich was patchen (in neuen Delphiversionen geht das "glaub ich" auch direkt im QuellCode, mit {$SetPEFlags ...} ) ... ich weiß zwar grad nicht was, aber such mal nach "3GB" bzw. "PE-Flags" ... ansonsten wird in deinem Programm, bei diesen Funktionen, alles auf 2 GB (Integergrenzen) runtergerundet.
OK, ich habe da hier was gefunden. Ich schaue mir das mal mit an. So richtig testen kann ich das aber nicht, habe ja nur 256 MB .
Zitat von himitsu:
Zitat von Regan:
Vollkommen richtig.
dann würde mir da aber eine maximale/durchschnittliche Angabe des Verbrauches besser gefallen, denn den aktuellen wert liefert mir auch der Taskmanager.
Das stimmt, ich habe es mir mit aufgeschrieben und werde das auf jeden Fall umsetzten. Kommt vielleicht sogar schon in der nächsten Version, mal schauen.


Zitat von sirius:
Gegen das 2GB Problem von GlobalMemorystatus, gibt es auch noch GlobalMemoryStatusEx:
Delphi-Quellcode:
type DWORDLONG=int64; //uint64 passt besser zu DWORDLONG
                      //bringt aber unter Delphi 7 falsche Werte
type TMemoryStatusEx=packed record
        dwLength: DWORD;
        dwMemoryLoad: DWORD;
        ullTotalPhys: DWORDLONG;
        ullAvailPhys: DWORDLONG;
        ullTotalPageFile: DWORDLONG;
        ullAvailPageFile: DWORDLONG;
        ullTotalVirtual: DWORDLONG;
        ullAvailVirtual: DWORDLONG;
        ullAvailExtendedVirtual: DWORDLONG;
     end;


procedure GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx); stdcall;
   external 'kernel32.dllname 'GlobalMemoryStatusEx';

procedure TForm1.Button1Click(Sender: TObject);
var mem:TMemoryStatusEx;
begin
  mem.dwLength:=sizeof(mem);
  GlobalMemoryStatusEx(mem);
  showmessage(inttostr(memEx.ullTotalPhys)); // -> 3211505664
end;
Zitat von sirius:
Ansonsten besteht noch der Fehler mit der Division durch 0 und mein Programm benötigt keinen Speicher (auch wenn es läuft).
Mist, das dachte ich mir. Das Problem dabei ist: Ich kann den Div durch 0-Error nicht reproduzieren. Deshalb ist es auch so schwer den Fehler zu finden.
Zu dem Speicher: Es ist seltsam, aber bei manchen Programmen wird wirklich kein Speicherverbrauch angezeigt (zumindest bei der Funktion, die ich nutze). Deshalb habe ich auch geschrieben, dass es 98% aller Programme sind .
  Mit Zitat antworten Zitat