Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Speicherverbrauch bei langer if...then-Liste (https://www.delphipraxis.net/186160-speicherverbrauch-bei-langer-if-then-liste.html)

hoika 9. Aug 2015 10:57

AW: Speicherverbrauch bei langer if...then-Liste
 
Hallo,
also beim Code sagt mir doch der Compiler "value not assigned", weil ton2 nicht initialisiert ist.

Lieber TE , du hast einen Bug produziert, sieh es einfach ein.

Also bitte mehr Code.

Wie steht es eigentlich mit einem Unit-Test?


Heiko

Aviator 9. Aug 2015 11:00

AW: Speicherverbrauch bei langer if...then-Liste
 
Das liegt wohl an der Zeile:
Delphi-Quellcode:
mediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, (ton2+'.mp3'));
Hier könnte es passieren, dass keine der IF-Statements greift und somit die Ausgabe ".mp3" wäre, da in ton2 nichts drin steht.

Edit: Um die Warnung zu entfernen, solltest du beim Aufruf der Procedure(?) den Wert von ton2 auf '' initialisieren.

Helmi 9. Aug 2015 11:05

AW: Speicherverbrauch bei langer if...then-Liste
 
Drehen wir doch den "Delphi-"Spieß doch einfach mal um:
Zeig uns doch mal deinen kompletten Code bei dem es zu Problemen kommt und auch das Suchwort
bei dem es vermeintlich zu Differenzen in der Verarbeitung von IF..THEN kommt.

haentschman 9. Aug 2015 11:29

AW: Speicherverbrauch bei langer if...then-Liste
 
@hoika:
Zitat:

Wie steht es eigentlich mit einem Unit-Test?
...da mußte ich schmunzeln. :P Offensichtlich hat der TE, ohne es abwertend zu meinen, nur Basiswissen. Meinst du nicht das das ihn überfordert?

Helmi 9. Aug 2015 11:33

AW: Speicherverbrauch bei langer if...then-Liste
 
Zitat:

Zitat von Aviator (Beitrag 1311569)
Edit: Um die Warnung zu entfernen, solltest du beim Aufruf der Procedure(?) den Wert von ton2 auf '' initialisieren.

Oder mal folgendes:
Delphi-Quellcode:
ton2 := '';

  if suchwort = 'am' then ton2:='am';
   if suchwort = 'im' then ton2:='im';
   if suchwort = 'Bär' then ton2:='Baer';

//...jede Menge if...then´s

   If ton2 <> '' then
     begin
       mediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, (ton2+'.mp3'));
       mediaPlayer1.Play;
     end;
Jetzt müssten ja "Aussetzer" zu hören sein, wenn das Suchwort nicht vorhanden ist

Sel2012 9. Aug 2015 11:48

AW: Speicherverbrauch bei langer if...then-Liste
 
[QUOTE=Uwe Raabe;1311566]
Zitat:

Zitat von Sel2012 (Beitrag 1311562)
Also muss der "Fehler" in der nicht mehr ständig, sondern nur gelegentlich funktionierenden Zuordnung zum THEN liegen. Darin sehe ich kein Programmierfehler, sondern ein internes Programm-Problem.

Entwarnung?! Ich habe aus anderen Gründen den Rechner ganz neu gestartet und siehe da, das Problem ist weg.
Ich konnte mir ja auch nicht erklären, warum simple und überschaubare IF..THEN-Anweisungen zu einem nicht konstanten "Zufallsergebnis" führen sollte. Also war es doch wohl ein außerhalb von Delphi liegendes temporäres Speicherproblem des Rechners.

stahli 9. Aug 2015 12:03

AW: Speicherverbrauch bei langer if...then-Liste
 
Kennst Du CodesiteLogging? XE5 hat das dabei (denke ich).

CodesiteLogging in den Uses einbinden und dann

Delphi-Quellcode:
   if suchwort = 'am' then ton2:='am';
   if suchwort = 'im' then ton2:='im';
   if suchwort = 'Bär' then ton2:='Baer';

   Codesite.Send(Suchwort + '->' + ton2);

   mediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, (ton2+'.mp3'));
   mediaPlayer1.Play;
So kannst Du zumindest mal die Ergebnisse verfolgen.

Oder hast Du einfach einen Bereichsüberlauf. Sind Deine Arrays mit 1 initialisiert?

Die Übersetzung würde ich aber wirklich über ein Dictionary, Stringlist oder Ini lösen.
Letzteres hätte den Vorteil, dass Du sie auch mal ohne Neukompilierung ändern und erweitern kannst.

idefix2 9. Aug 2015 12:11

AW: Speicherverbrauch bei langer if...then-Liste
 
Dass eine Kette von if-then Zuweisungen nicht funktionieren, wenn es "zu viele" werden, das wäre in der 20jährigen Geschichte von Delphi ein Unikum, das man wohl ausschliessen kann.
Da läuft mit Sicherheit etwas anderes schief, und bei endlosen Codeschlangen ist das auch nicht zu verwundern. Ohne das ganze Projekt zu sehen, werden wir wohl nicht viel helfen können.

Unabhängig davon, dass es sicher funktioniert, deuten aber soclche Unmengen von Abfragen auf krasse Designfehler hin. Hinweise auf TDictionary und TStringList sind schon gefallen, du solltest das Programm unbedingt in so einer Richtung umbauen.

Daniel 9. Aug 2015 12:15

AW: Speicherverbrauch bei langer if...then-Liste
 
Zitat:

Zitat von Sel2012 (Beitrag 1311573)
[Ich habe aus anderen Gründen den Rechner ganz neu gestartet und siehe da, das Problem ist weg.
Ich konnte mir ja auch nicht erklären, warum simple und überschaubare IF..THEN-Anweisungen zu einem nicht konstanten "Zufallsergebnis" führen sollte. Also war es doch wohl ein außerhalb von Delphi liegendes temporäres Speicherproblem des Rechners.

Solang es keine reine Beschäftigungstherapie für die DP-Benutezr war ... :roll:
Nachdem das Problem gelöst ist, wie die Ursache vermutlich nie finden werden mache ich hier mal zu. Auf Basis dieser dünnen Informationslage erübrigen sich weitere Beiträge.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Seite 2 von 2     12   

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