AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherverbrauch bei langer if...then-Liste

Ein Thema von Sel2012 · begonnen am 9. Aug 2015 · letzter Beitrag vom 9. Aug 2015
Thema geschlossen
Seite 1 von 2  1 2      
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#1

Speicherverbrauch bei langer if...then-Liste

  Alt 9. Aug 2015, 06:56
Ich habe keine Ahnung, wie rechnerintern Speicherplatz für if...then verwendet wird.
Bei ca. 60 if...then-Zeilen habe ich keine Probleme. Bei längeren "Listen" kommt die
Zuordnung außer Tritt. Wahrscheinlich müsste der Speicherbedarf vorstrukturiert werden, oder?

Siehe Beispiel.
Delphi-Quellcode:
// Zufallswort wird ausgesucht

wortwahl[w]:= random (maxLine)+1;
   wort[w]:= Memo1.Lines.Strings[wortwahl[w]];

// 4x das gleiche...

   wort_1.text:= wort[1];
   wort_2.text:= wort[2];
   wort_3.text:= wort[3];
   wort_4.text:= wort[4];

// davon wird ein Wort vertont

   tonwahl:=random (4) + 1;
   suchwort:= wort[tonwahl];
   mediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, (suchwort+'.mp3'));
   mediaPlayer1.Play;

{ so klappt das gut. Bei Wörtern mit Umlauten muss ich aber wegen .mp3 die Tondatei
  umbenennen. Dazu fällt mir leider nur die if..then-Variante ein.
  Die funktioniert auch gut und stabil bis zu ca. 60 Zeilen. }


  if suchwort = 'amthen ton2:='am';
  if suchwort = 'imthen ton2:='im';
  if suchwort = 'Bärthen ton2:='Baer';

  mediaPlayer1.FileName := TPath.Combine(TPath.GetDocumentsPath, (ton2+'.mp3'));
  mediaPlayer1.Play;

// Bei längeren if...then-Listen kommt ton2 bei einer Neuwahl von suchwort "aus dem Tritt" und der letzte ton2
// wird 1- oder 2-mal wiederholt.
 
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 9. Aug 2015, 07:05
Moin...

Als erstes schreibst du uns bitte mal deine Delphi Version. Da können wir genauer helfen.

Das Problem hat imho nichts mit der if then Orgie zu tun. Durch die vielen Zeilen, und der damit verbundenen Unübersichtlichkeit, können sich andere Fehler einschleichen.

Tipp / eine Möglichkeit:
Die Daten z.B. Bär = Baer extern in einer INI oder Textdatei vorhalten. Diese in das Programm einlesen und in einer Liste oder Dictionary verwalten. Das erspart bei Ergänzungen das Ändern des Programmes...
 
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 9. Aug 2015, 07:59
Ich habe keine Ahnung, wie rechnerintern Speicherplatz für if...then verwendet wird.
Bei ca. 60 if...then-Zeilen habe ich keine Probleme. Bei längeren "Listen" kommt die
Zuordnung außer Tritt. Wahrscheinlich müsste der Speicherbedarf vorstrukturiert werden, oder?
Nein - es ist das menschliche Hirn, das aus dem Tritt kommt und den Code nicht mehr überblickt.
Du möchtest eine eindeutige Zuordnung schaffen zwischen Suchbegriff und Dateiname. Klassisch könnte man hier ein Dictionary verwenden. Etwas - billiger - aber auch nicht schlecht: TStringList. Auch diese bietet eine Zuordnung zwischen Name und Wert an und der kannst Du sogar sagen, was bei Duplikaten passieren soll.

Davon abgesehen, dass das IF absolut zuverlässig funktioniert, ist es die falsche Herangehensweise bei diesem Problem - weil der Code ein unwartbares Monstrum wird. Das siehst Du ja jetzt schon.
Daniel R. Wolf
mit Grüßen aus Hamburg
 
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#4

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

  Alt 9. Aug 2015, 08:32
Moin...

Als erstes schreibst du uns bitte mal deine Delphi Version. Da können wir genauer helfen.

Das Problem hat imho nichts mit der if then Orgie zu tun. Durch die vielen Zeilen, und der damit verbundenen Unübersichtlichkeit, können sich andere Fehler einschleichen.

Tipp / eine Möglichkeit:
Die Daten z.B. Bär = Baer extern in einer INI oder Textdatei vorhalten. Diese in das Programm einlesen und in einer Liste oder Dictionary verwalten. Das erspart bei Ergänzungen das Ändern des Programmes...
Ich arbeite mit XE5. Bei allen dummen Fehlern, die mir schon unterlaufen sind, kann ich hier ganz unbescheiden behaupten, dass die 100 Zeilen lange Wiederholung der immer gleichen if...then-Zeilen ausgesprochen übersichtlich ist. Die falsche Zuordnung tritt ja auch nicht regelmäßig und reproduzierbar auf, sondern mehr zufällig. Bei 3 Durchläufen passiert nix falsches, dann mal hier, mal da eine falsche (die vorherige) Zuordnung. Beim nächsten Durchlauf ist wieder alles ok. Gerade diese Unregelmäßigkeit lässt mich vermuten, dass prinzipiell kein Programmierfehler vorliegt (sonst würde sich ja ein Fehler reproduzierbar einfressen), sondern dass sich ein Speicherproblem auswirkt.
Ich kann nicht generell "Bär" zu "Baer" machen, da als Text im Label "Bär" angezeigt werden soll.
 
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#5

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

  Alt 9. Aug 2015, 08:42

Davon abgesehen, dass das IF absolut zuverlässig funktioniert, ist es die falsche Herangehensweise bei diesem Problem - weil der Code ein unwartbares Monstrum wird. Das siehst Du ja jetzt schon.
Es ist ja gerade das Rätsel, dass ich ganz einfach deine These vom "zuverlässigen IF...THEN" widerlagen kann. Die Erklärung dafür würde mich schon (theoretisch) interessieren.
Jetzt werde ich mich mal auf TStringList konzentrieren (für 2000 Suchbegriffe).
 
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 9. Aug 2015, 08:46
Es ist ja gerade das Rätsel, dass ich ganz einfach deine These vom "zuverlässigen IF...THEN" widerlagen kann
Ganz so einfach ist es nicht.
Stand jetzt hast Du ein fehlerhaftes Projekt - den Nachweis hast Du erst dann erbracht, wenn Deine Situation reproduzierbar wird. Und genau das ist ja nach Deiner Aussage nicht gegeben.
Daniel R. Wolf
mit Grüßen aus Hamburg
 
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 9. Aug 2015, 08:48

Zitat:
...kann ich hier ganz unbescheiden behaupten, dass die 100 Zeilen lange Wiederholung der immer gleichen if...then-Zeilen ausgesprochen übersichtlich ist.
...dem widerspreche ich mal spontan. Es liegt im Auge des Betrachters. Unbestritten ist aber das der Code bescheiden wartbar ist.
Zitat:
Ich kann nicht generell "Bär" zu "Baer" machen, da als Text im Label "Bär" angezeigt werden soll.
Sollst du ja auch nicht. Du greifst dann nur auf das Dictionary zu wenn du das Äquivalent benötigst.
Zitat:
...dass prinzipiell kein Programmierfehler vorliegt (sonst würde sich ja ein Fehler reproduzierbar einfressen), sondern dass sich ein Speicherproblem auswirkt.
Setze doch mal an alle 100 - 2000 Zuweisungen einen Breakpoint. Da kannst du dann sehen wann und warum welcher Wert zugewiesen wird.

Hänge das fehlerhafte Projekt mal komplett an.
 
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#8

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

  Alt 9. Aug 2015, 09:24
Es ist ja gerade das Rätsel, dass ich ganz einfach deine These vom "zuverlässigen IF...THEN" widerlagen kann
Ganz so einfach ist es nicht.
Stand jetzt hast Du ein fehlerhaftes Projekt - den Nachweis hast Du erst dann erbracht, wenn Deine Situation reproduzierbar wird. Und genau das ist ja nach Deiner Aussage nicht gegeben.
Ich muss nur die "Liste" der if...then-Zeilen auf 30 reduzieren und schon läuft alles tausendfach stabil. 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.
Aber, wie schon festgestellt, wäre diese Abfrage für 2000 Wörter nicht praktikabel. Nur theoretisch wäre eine Erklärung des Phänomens interessant.
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 9. Aug 2015, 09:29
Wenn ein Programm nicht tut, was es soll, liegt das in den allermeisten Fällen an Denkfehlern des Programmierers, gefolgt von Fehlern in den verwendeten Klassen/Komponenten und nur in ganz ganz seltenen Fällen (ich schätze, weit unter 1%) an Fehlern im Compiler.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
 
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 9. Aug 2015, 09:41
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.
Dann siehst du das falsch. Ein IF-THEN funktioniert unter denselben Voraussetungen entweder immer oder nie. Die Tatsache, daß es bei allen anderen immer funktioniert und nur bei dir manchmal, ist ein starkes Indiz, daß die Ursache eben nicht in Delphi liegt, sondern in dem, was du programmiert hast. Offenbar stellst du eben nicht immer dieselben Voraussetzungen sicher. Das Problem ist also mit Sicherheit kein Fehler in Delphi - und das wird dir jeder hier, der mit Delphi arbeitet, bestätigen können.

Wenn ich hier mal aus dem The Pragmatic Programmer zitieren darf:
Zitat von Pragmatic Software Development Tips:
“select” Isn’t Broken
It is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application.
Leider können wir ohne den vollständigen Quelltext bzw. eine vollständige Testumgebung auch nicht sagen, was die eigentliche Ursache ist. Damit könnten wir auch noch eine weitere, wenn auch sehr unwahrscheinliche Fehlerquelle (eine defekte Hardware) ausschließen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
 
Thema geschlossen
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 21:41 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