AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie frage ich die noch verfügbaren Windows-Resourcen ab?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie frage ich die noch verfügbaren Windows-Resourcen ab?

Offene Frage von "Stephan P."
Ein Thema von Stephan P. · begonnen am 19. Jun 2008 · letzter Beitrag vom 20. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Stephan P.

Registriert seit: 19. Jun 2008
3 Beiträge
 
#1

Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 12:41
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 12:49
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 12:53
Zitat von Stephan P.:
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?/quote]
Ich glaube nicht das es sowas gibt. Windows wird selbst nicht so genau wissen wieviele Handels es für den Prozess noch übrig hat.
Zitat von Luckie:
Hm, jetzt bin ich mir nicht mehr sicher, ob man die Dinger so nennt. Aber ich glaube FastMem kann so was auch.
Nur wenn für jede GDI-Ressource ein Delphi-Objekt übrig bleibt. Für reine GDI-Ressourcen ist FastMM "blind". Hier ist u.U. AQTime sinnvoll einzusetzen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 12:59
Ich hab da was altes gefunden...das ist allerdings sehr alt.

Delphi-Quellcode:
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;
Edit: Das Ergebnis sind wohl die freien Ressourcen in %...oder so ähnlich

Sherlock
Oliver
  Mit Zitat antworten Zitat
Stephan P.

Registriert seit: 19. Jun 2008
3 Beiträge
 
#5

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 13:08
Hallo Michael,

Zitat von Luckie:
Mit Hilfe eines Profilers solltest du die Speicherlecks finden können.
danke für den Hinweis, aber ich gehe erst mal nicht davon aus, dass es sich um ein Speicherleck handelt. Hier werden wirklich (testweise) tausende Komponenten dynamisch angelegt, die von TCustomPanel abstammen. Mir würde es erst mal reichen, wenn ich eine passende Delphi-Funktion oder -Methode hätte, mit der ich ein Auge auf die noch verfügbaren Resourcen werfen könnte.

Viele Grüße,

Stephan
  Mit Zitat antworten Zitat
Stephan P.

Registriert seit: 19. Jun 2008
3 Beiträge
 
#6

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 13:10
Hallo,

Zitat von Sherlock:
Ich hab da was altes gefunden...das ist allerdings sehr alt.
über GetFreeSystemResources bin ich auch schon gestolpert, aber das scheint noch aus 16-bit Delphi-Zeiten zu stammen...


Viele Grüße,

Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 13:13
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:
http://support.microsoft.com/?scid=k...4924&x=18&y=11

Ich glaube auch, daß sowas nicht mehr benötigt wird.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 13:23
Zitat von Sherlock:
Ich glaube auch, daß sowas nicht mehr benötigt wird.
(GDI-)Resourcen sind auch unter Vista/2008 noch eine beschränktes Gut. Die Anzahl der verfügbaren Ressourcen wächst jedoch mit jeder Windows-Version.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 13:27
Zitat von Stephan P.:
danke für den Hinweis, aber ich gehe erst mal nicht davon aus, dass es sich um ein Speicherleck handelt. Hier werden wirklich (testweise) tausende Komponenten dynamisch angelegt, die von TCustomPanel abstammen. Mir würde es erst mal reichen, wenn ich eine passende Delphi-Funktion oder -Methode hätte, mit der ich ein Auge auf die noch verfügbaren Resourcen werfen könnte.
Das wird alleine schon bei den Windowhandles knapp, fürs Userland sind (bei XPXP2, wie es unter anderen Versionen aussieht, kann ich auf Anhieb nicht sagen) ohne Klimmzüge nur ca. 10.000 davon verfügbar - wenn die weg sind, schlagen Aufrufe zum Erzeugen eines neuen Fensters usw. einfach fehl und das wars. Diese Situation hatte ich mit dem IE7 häufig da ich dort etliche Tabs offen hatte (von denen frisst jedes unglaubliche Mengen an Handles) - man merkts dann erst wenn keine Fenster mehr aufgehen IE7 zumachen oder unbenötigte Tabs schließen und schon gehts wieder.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Wie frage ich die noch verfügbaren Windows-Resourcen ab?

  Alt 19. Jun 2008, 23:23
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 )
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz