![]() |
Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Hallo,
einem meiner Programme (oder besser gesagt, einem Programm, dass ein Benutzer mit meiner VCL-Komponentenbibliothek geschrieben hat), gehen anscheinend die Windows-Resourcen aus. Ich wollte mir jetzt erst mal einen Überblick darüber verschaffen, wie das Programm mit den Resourcen umgeht. Wahrscheinlich bin ich blind, aber ich finde in der Delphi-Hilfe keine Funktion/Methode, mit denen sich die noch verfügbaren Windows-Resourcen (z.B. Windows-Handles) abfragen lassen. Kann mir da vielleicht jemand weiter helfen? Ich benutze im Moment D7 auf WinXP, habe aber ab D5 auch alle anderen Delphi-Versionen zur Verfügung. Vielen Dank im Voraus für Eure Hilfe, Stephan |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Mit Hilfe eines Profilers solltest du die Speicherlecks finden können.
Hm, jetzt bin ich mir nicht mehr sicher, ob man die Dinger so nennt. Aber ich glaube FastMem kann so was auch. |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
Zitat:
|
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Ich hab da was altes gefunden...das ist allerdings sehr alt.
Delphi-Quellcode:
Edit: Das Ergebnis sind wohl die freien Ressourcen in %...oder so ähnlich :mrgreen:
function GetFreeSystemResources(SysResource: Word): Word;
var huser16, huser32: THandle; ThunkTrash: array[0..$20] of Word; fp, qfp: Pointer; begin result := 0; if (SysUtils.Win32PlatForm = VER_PLATFORM_WIN32_NT) then exit; // NT huser16 := 0; huser32 := 0; try ThunkTrash[0] := huser16; huser16 := LoadLibrary16('user.exe'); fp := GetProcAddress16(huser16, 'GetFreeSystemResources'); huser32 := LoadLibrary('Kernel32'); qfp := GetProcAddress(huser32, 'QT_Thunk'); if (fp = nil) or (qfp = nil) then exit; asm push SysResource mov edx, fp call qfp mov Result, ax end; finally FreeLibrary16(huser16); FreeLibrary(huser32); end; end; Sherlock |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Hallo Michael,
Zitat:
Viele Grüße, Stephan |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Hallo,
Zitat:
Viele Grüße, Stephan |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Genau...laut MS gibt diese Routine unter W2k und XP immer 90% zurück ^^
Wie auch immer, hier noch ein weiter führender Link dazu: ![]() Ich glaube auch, daß sowas nicht mehr benötigt wird. Sherlock |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
|
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
|
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
1. Ein Profiler kann die Laufzeiten in Programmteilen ermitteln - wie sollte dieser bei Speicherlecks helfen? Bitte auf Fachbegriffe achten, wenn sie schon genannt werden und nicht vollkommen verkehrt. (Luckie :warn: )
2. Bei Delphi kommt man leicht in die Bedrängnis mit den Resourcen, da viele einfache Objekte mehr Handles benötigen als man braucht. Ein TCanvas beinhaltet neben dem HDC auch gleich noch einen HPEN und HBRUSH. 3. Bei Win95 waren Windowsglobal ein GDI Handleliste von 32K verfügbar. Ab Win98 waren es schon 64K und mit ME wurde es auf 92K angehoben. Mit NT und deren Nachfolgern wurden die Handles dynamisch gehandhabt, aber trotzdem sind sie begrenzt. Hier greift aber eher der Windows eigene Schutz und so wird u.a. ein Prozess mit mehr als 20.000 reinen GDI Handles sang und klanglos beendet. Die VCL hält es manchmal durch die Exceptions nicht mehr aus und zerschiesst das Programm auch mal selber vor dieser Grenze, da es noch manche Ecken der VCL gibt, wo die alloziierten Handles nicht überprüft werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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 by Thomas Breitkreuz