Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash (https://www.delphipraxis.net/188952-tbitmap-loadfromresourcename-fuehrt-zu-systemfehler-87-und-application-crash.html)

DSCHUCH 21. Apr 2016 19:35

TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash
 
Hallo,

ich untersuche gerade einige Performance-Effekte insb. mit dem DBNavigator. Dabei gab es bei mir irgendwann immer einen Crash Code 87. Ich konnte das jetzt auf ein Programm mit wenigen Zeilen reproduzierbar machen. Das ganze passiert in Delphi XE. Kann das mal bitte jemand validieren?

Neue Delphi-Anwendung (VCL Formular). Button drauf und einfach folgenden Click-Code. Achtung, das uses mitnehmen, kann ja direkt über die ClickProcedure.

Delphi-Quellcode:
uses ExtCtrls, DBCtrls, DB;

procedure TFormX.ButtonXClick(Sender: TObject);
var I, H : Integer;
    t   : TTime;
begin
 Screen.Cursor:=crHourGlass;
try
 t:=Now;
 for I := 0 to 5000 do //crash ab 5000;;; SystemFehler: Code 87 ... auch mit 500, dann halt ca. 10 mal clicken.
     TBitmap.Create.LoadFromResourceName(HInstance, 'dbn_FIRST');
finally
 Screen.Cursor:=crDefault;
end;
 ShowMessage('Done:'+TimeToStr(Now-t));
end;
VG,
Daniel.

Aviator 21. Apr 2016 21:06

AW: TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash
 
Sicher das das kein OutOfMemory Error ist? Du erzeugst 5001 Bitmaps, gibst diese aber nirgends wieder frei bzw. speicherst sie zwischen. Mach mal den Taskmanager auf und schau was mit deinem RAM passiert. Evtl. kommst du ja über die 2GB Grenze. Probiert habe ich das jetzt nicht, aber es würde mich nicht wundern wenn es so wäre.

Hast du mal nachgeschaut was "Error 87" für ein Error ist?

DSCHUCH 21. Apr 2016 23:33

AW: TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash
 
Der Speicher gem. TaskMgr liegt bei <100 MB.

kA evtl hab ich auch nen Denkfehler.

DSCHUCH 21. Apr 2016 23:41

AW: TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash
 
Auf 32 Bit wirft es "Systemressourcen erschöpft", ich schau mir das morgen nochmal an.

Zacherl 22. Apr 2016 02:02

AW: TBitmap.....LoadFromResourceName Führt zu SystemFehler 87 und Application Crash
 
Zitat:

Zitat von DSCHUCH (Beitrag 1336299)
Auf 32 Bit wirft es "Systemressourcen erschöpft", ich schau mir das morgen nochmal an.

Das ist nicht der Arbeitsspeicher der voll läuft. Bei so vielen Bitmaps und dazugehörigen Canvas Instanzen wird die maximale Anzahl an GDI Objekten schlicht und einfach überschritten.

Dagegen kannst du leider nichts tun (außer nicht so viele gleichzeitig aktive Bitmap-Instanzen zu erzeugen :stupid:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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