Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 22:17

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 49 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Lecks bei zu langer Laufzeit
BeitragVerfasst: Di Okt 03, 2006 09:03 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ich wende mich in der denkbar schlimmsten Lage an euch...
Ich sitze nun schon einige Weile und suche verzweifelt einen Performancebug.

Im OnidleEvent binde ich folgendes ein:
Code:
  1.  
  2.   StartTick := GetTickCount;
  3.  
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.  
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glLoadIdentity;
  8.  
  9.   glTranslatef(0,-1,-15);
  10.  
  11. [RENDERABSCHNITT]
  12.  
  13.   if FPSDraw = TRUE then
  14.   begin
  15.     OrthoStart();
  16.     DrawFPSGraph;
  17.     OrthoStop();
  18.   end;
  19.  
  20.   SwapBuffers(DC);
  21.  
  22.   DrawTime := GetTickCount - StartTick;
  23.  
  24.   INC(Frames);
  25.   Result := DrawTime;
  26.  
  27.   if GetTickCount-LastTick >= 1000 then
  28.   begin
  29.     INC(Seconds);
  30.     LastTick := GetTickCount;
  31.  
  32.     if Length(Effekte)>0 then
  33.       UseForm.Caption := 'ShaddowEngine .:. 0.0.0.1 '+ IntToStr(Frames) + ' FPS - ' + IntToStr(CalculateEffektNumParticles) + ' Particles'
  34.     else
  35.       UseForm.Caption := 'ShaddowEngine .:. 0.0.0.1 '+ IntToStr(Frames) + ' FPS';
  36.  
  37.     for i:=0 to Length(FPS60)-1 do
  38.       if FPS60[i+1]>0 then
  39.         FPS60[i]:=FPS60[i+1];
  40.  
  41.     FPS60[59] := Frames;
  42.     Frames :=0;
  43.   end;
  44.  
  45.   if FirstRun=TRUE then FirstRun:=FALSE;
  46.  


Eventuell falls es was bringt, hier noch die DrawFPSGraph:
Code:
  1.  
  2. procedure TEngine.DrawFPSGraph();
  3. var i, DiffWidth:Integer;
  4.     HighestFPS, ActualFPSHeight: Cardinal;
  5. begin
  6.   HighestFPS:=0;
  7.  
  8.   for i:=0 to Length(FPS60)-1 do
  9.     if HighestFPS<FPS60[i] then
  10.       HighestFPS:=FPS60[i];
  11.  
  12.   glEnable(GL_BLEND);
  13.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  14.  
  15.   // BackGround
  16.   glColor4f(0.5,0.6,0.7,0.25);
  17.   glBegin(GL_QUADS);
  18.     glVertex3i(FPS_GRAPH_POSITION[0],FPS_GRAPH_POSITION[1],0);
  19.     glVertex3i(FPS_GRAPH_POSITION[2],FPS_GRAPH_POSITION[3],0);
  20.     glVertex3i(FPS_GRAPH_POSITION[4],FPS_GRAPH_POSITION[5],0);
  21.     glVertex3i(FPS_GRAPH_POSITION[6],FPS_GRAPH_POSITION[7],0);
  22.   glEnd();
  23.  
  24.   // Rahmen
  25.   glColor4f(0.5,0.6,0.7,1);
  26.   glBegin(GL_LINE_LOOP);
  27.     glVertex3i(FPS_GRAPH_POSITION[0],FPS_GRAPH_POSITION[1],0);
  28.     glVertex3i(FPS_GRAPH_POSITION[2],FPS_GRAPH_POSITION[3],0);
  29.     glVertex3i(FPS_GRAPH_POSITION[4],FPS_GRAPH_POSITION[5],0);
  30.     glVertex3i(FPS_GRAPH_POSITION[6],FPS_GRAPH_POSITION[7],0);
  31.   glEnd();
  32.  
  33.   glColor4f(0.5,0.6,0.7,0.25);
  34.   glBegin(GL_LINES);
  35.     // Vertikale Linien
  36.     for i:=0 to FPS_GRAPH_WIDTH DIV 10 do
  37.     begin
  38.       glVertex3i(FPS_GRAPH_POSITION[0]+i*10,FPS_GRAPH_POSITION[1],0);
  39.       glVertex3i(FPS_GRAPH_POSITION[6]+i*10,FPS_GRAPH_POSITION[7],0);
  40.     end;
  41.  
  42.     // Horizontale Linien
  43.     glVertex3i(FPS_GRAPH_POSITION[0],FPS_GRAPH_POSITION[1]+FPS_GRAPH_HEIGHT DIV 2,0);
  44.     glVertex3i(FPS_GRAPH_POSITION[2],FPS_GRAPH_POSITION[3]+FPS_GRAPH_HEIGHT DIV 2,0);
  45.  
  46.     // aktuelle FPS
  47.     glColor4f(0.5,0.6,0.7,0.5);
  48.     for i:=0 to Length(FPS60) do
  49.     begin
  50.       if FPS60[i]>0 then
  51.       begin
  52.         ActualFPSHeight := FPS_GRAPH_HEIGHT-round(FPS60[i]*FPS_GRAPH_HEIGHT/(HighestFPS+10));
  53.         //unten
  54.         glVertex3i(FPS_GRAPH_POSITION[0]+i*10,FPS_GRAPH_POSITION[1],0);
  55.         // oben
  56.         glVertex3i(FPS_GRAPH_POSITION[6]+i*10,FPS_GRAPH_POSITION[7]-ActualFPSHeight,0);
  57.       end;
  58.     end;
  59.   glEnd();
  60.   glDisable(GL_BLEND);
  61.  
  62.   DiffWidth := FontManager.GetTextWidth('FPS',inttostr(FPS60[59])+' FPS');
  63.  
  64.   glEnable(GL_TEXTURE_2D);
  65.     with FontManager do
  66.     begin
  67.       Draw('FPS',inttostr(HighestFPS)+' FPS',    FPS_GRAPH_POSITION[2]+5,           FPS_GRAPH_POSITION[5] - FontManager.Fonts[0].Height);
  68.       Draw('FPS',floattostr(HighestFPS/2)+' FPS',FPS_GRAPH_POSITION[2]+5,           FPS_GRAPH_POSITION[3] + FPS_GRAPH_HEIGHT DIV 2 - GetTextHeight('FPS') DIV 2);
  69.       Draw('FPS','0 FPS',                        FPS_GRAPH_POSITION[2]+5,           FPS_GRAPH_POSITION[3]);
  70.       Draw('FPS',inttostr(FPS60[59])+' FPS',     FPS_GRAPH_POSITION[0]+5,           FPS_GRAPH_POSITION[1]);
  71.       Draw('FPS',inttostr(Seconds)+' Seconds',   FPS_GRAPH_POSITION[0]+DiffWidth+25,FPS_GRAPH_POSITION[1]);
  72.     end;
  73.   glDisable(GL_TEXTURE_2D);
  74. end;


Ich weiss ja leider nicht, wo der Fehler liegt, aber er äußert sich folgendermaßen:
Sobald ich die Exe etwa 130 Sekunden oder so laufen lasse, wackelt der ansonsten so stabile FPS Wert. Eben noch konstant auf 60, kippt er auf einmal auf 54 dann wieder auf 60 usw.
Stoppe ich dann die Anwendung, dauert es wirklich einige Sekunden (vlt 10) bis die Anwendungen geschlossen wurde, und ich meinen Desktop wieder sehe. Wenn die Sekundendauer unter 60 liegt, dann beginnt es irgendwie zu laggen.

Gibs das bei euch auch?
Wenn ja, habt ihr ne Idee, worans liegt. Habe schon so einiges auskommtiert, aber es wird nich besser....

Hier die Exe: http://shaddow89.sh.funpic.de/2006-10-3v2_particle.rar

Danke schonma


Zuletzt geändert von Shaddow am Di Okt 03, 2006 16:31, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 13:12 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Es liegt scheinbar irgendwo an der SPeicherfreigabe... nach 60 Sekunden verschlingt die Anwendung bereits 360mb Arbeitsspeicher, das kann nich wahr sein...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 13:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Im obigen Code kann ich keine Lecks finden, aber ein so gewaltiger Speicherfresser sollte doch zu finden sein.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 13:52 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Eben das ist es ja...
Ich denke mal, wenn mein Speicherverbrauch sich jede Sekunde um 6 bis 8mb erhöht, dann liegt es irgendwo an Dyn arrays, aber ich habe alle gechecked... sie werden nur selten mal initialisiert, und ordnungsgemaess gelöscht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 14:00 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Beim neuen Turbo Delphi kann man sich die Speicherlecks ausgeben lassen. Einfach ReportMemoryLeaksOnShutdown := True; am Anfang ins Programm schreiben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 15:41 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Bei mir funkt die Installtion partout nich...
Geht das vllt auch mit D7 oder D2005?

Ansonsten ich habe echt keine Ahnung, warum die Performance so leidet


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Für "ältere" Delphiversionen kann man auch FastMM nutzen, mit dem man Speicherlecks sehr schnell auffinden kann.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:07 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also ich weiss nich wirklich wie ich damit umgehen soll, also hab ich einfach ma getestet. und so habe ich also mein Programm als hostprogramm des Replacement BorlndMM DLL ausgeführt. ich hatte eigentlich irgendne msg oder eine file erwartet, die mir was sagt, aber nix dergleichen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das steht alles direkt in der FastMM4.pas drin.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 14, 2006 13:08
Beiträge: 117
Wohnort: Berlin
hi Shaddow.

Hab mal die EXE ausgetestet, nach ca 10 min und allem verstellen etc immernoch unter 8MB speicherverbrauch.
Nach beenden des Progs Desktop sofort sichtbar.
(fps - anzeige vermisst, daher keine Aussage ;o) )

Gruß Uwe

System :
WinXP Pro

Sascha schrieb:
Zitat:
...FastMM4...

Shaddow fragt:
Zitat:
Geht das vllt auch mit D7 oder D2005?


Ich schreibe:
Ja das geht, ich hab es bei beiden Installationen am Laufen

_________________
Die 3 Totfeinde eines Programmierers ?
a) Tageslicht
b) frische Luft
c) ..und das ständige Gebrüll der Vögel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:29 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
uweq hat geschrieben:
(fps - anzeige vermisst, daher keine Aussage ;o)
Hier hab ich mich gewundert... Sorry habe die falsche URL gepostet:
http://shaddow89.sh.funpic.de/2006-10-3v2_particle.rar

Da is naemlich n FPS Counter dabei ^^
uweq hat geschrieben:
Sascha schrieb:
Zitat:
...FastMM4...

Shaddow fragt:
Zitat:
Geht das vllt auch mit D7 oder D2005?


Ich schreibe:
Ja das geht, ich hab es bei beiden Installationen am Laufen
[/quote]

Das hats du falsch aufgefasst. Mein "geht das auch..." bezog sich auf Losseys Comment nicht auf Saschas. Habe es eben wie in der FastMM4 angewiesen, ausgeführt, aber es kam trotzdem keinerlei hinweis, was denn nun mit meinem speicher los is. bekomm ich da eine logdatei oder wie?
da steht ja nur drin, dass ich es als erstes use einbinden soll usw.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 14, 2006 13:08
Beiträge: 117
Wohnort: Berlin
hi Shaddow,

Zitat:
ich hatte eigentlich irgendne msg oder eine file erwartet, die mir was sagt, aber nix dergleichen.

wenn du mit FastMM arbeitest und Delphi dann musst Du die FastMM-DLL ins Such-Path hinkopieren. Also ich hab sie ins Win/system32-Dir reingelegt. Weiterhin muss die FastMM.pas über Bibliothekspfad deiner Anwendung auffindbar sein.

Dann trage in deiner xxx.dpr als erste Zeile FastMM4, ein.
Danach dann siehe Bild:
Alles andere kannst dann wie Sascha schrieb in der FastMM4.pas einstellen.
...und du erhälst deine Datei in TXT-Form im Arbeitsverzeichznis Deines PAS-Projekts ausgegeben.

Gruß Uwe


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Die 3 Totfeinde eines Programmierers ?
a) Tageslicht
b) frische Luft
c) ..und das ständige Gebrüll der Vögel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:43 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ah danke. Ein Prob noch. Trotz der Tatsache, dass meine Uses so aussehen:
Code:
  1. uses FastMM4,
  2.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  3.   Dialogs, ExtCtrls,
  4.  
  5.   DGLOpenGL,
  6.  
  7.   Engine, Effect, BugTracker, Tools, AppEvnts;


Bringtz er mir den Fehler, dass der Memory nicht zugewiesen werden konnte etc. Cannot install FastMM4 - Memory has already been allocated


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 16:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 14, 2006 13:08
Beiträge: 117
Wohnort: Berlin
das was du da im Source zu stehen hast ist falsch.

Der speicher fuer FastMM MUSS als ERSTES reserviert werden also direkt in der Projekt-Datei,
und sonst nirgendwo anders mehr.

Gruß Uwe


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Die 3 Totfeinde eines Programmierers ?
a) Tageslicht
b) frische Luft
c) ..und das ständige Gebrüll der Vögel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 03, 2006 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 14, 2006 13:08
Beiträge: 117
Wohnort: Berlin
hi Shaddow,

Fehlersuche:
Setze Dein Augenmerk auf Dynamische Array und deren Freigabe.
Solch ein riesiger Speicherbedarf kann nur dadurch erzeugt werden, oder durch erzeugen von immer neuen Objecten, welche nicht mehr freigegeben werden.

Achtung:
Lass dein Prog nicht solange laufen, denn deine Fehlerreportdatei dürfte etwa nach 30 sekunden eine größe von ca >500MB haben.

Gruß Uwe
[edit]
Bin dann jetzt leider mal kurz raus hier, hoffe ich konnte dir helfen.
[/edit]

_________________
Die 3 Totfeinde eines Programmierers ?
a) Tageslicht
b) frische Luft
c) ..und das ständige Gebrüll der Vögel


Zuletzt geändert von uweq am Di Okt 03, 2006 17:04, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 49 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 14 Queries | GZIP : On ]