![]() |
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. |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
Mit anderen Worten: Die Grenzen verwischen und der genannte Profiler hat das gesuchte definitiv nicht in der Hauptaufgabe. Heutzutage könnte ich genauso gut einen Debugger empfehlen, der übernimmt solche gesuchten Dinge z.T. auch schon. Im Ergebnis bleibe ich beim dem Smiley, da es nicht die Hauptaufgabe eines Profilers ist und es von daher auch noch genug Profiler gibt, welche dieses nicht unterstützen. Ich nutze z.B. ProDelphi und dies hat eine solche Funktion nicht und es auch ein Profiler... |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
Zitat:
Zitat:
Ich denke das Mißverständnis könnte im Begriff "Laufzeitverhalten" liegen. Die Betonung liegt dabei eben nicht auf Laufzeit, ansonsten könnte man ja auch direkt "Laufzeit" schreiben. Es geht oftmals nichtmal um Zeit sondern eher um die Anzahl von Aufrufen oder eben die Benutzung bestimmter Ressourcen. Und während nicht alle Profiler die AQTime unter diesem Namen anbietet auch der Definition auf Wikipedia entsprechen, so sind doch alle drei Disziplinen dort vertreten. |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
|
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
:warn: Thomas, lies die Beiträge genauer und äussere dich in diesem Forum nur fachlich und nicht zu anderen Themen, die dich nichts angehen - oder verschwinde hier.
Ich hatte den letzten Teil anders verstanden, weil Profiler gibt es und ich hatte deine Unsicherheit nicht auf die richtige Programmfunktion bezogen sondern auf den richtigen Namen des Programmtyps. |
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
|
Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 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-2025 by Thomas Breitkreuz