![]() |
AW: Codeoptimierung lieber abschalten
Zitat:
Grüße, Andreas |
AW: Codeoptimierung lieber abschalten
Zitat:
OK, ernsthaft: Das mache ich auch so, allerdings nicht durch ifdef im Sourcecode sondern durch Setzen der Option in der Release-Config. Das ifdef hat den Nachteil, dass es nicht so simpel ist, die Optimierung einzuschalten, weil man dafür den Sourcecode ändern muss. |
AW: Codeoptimierung lieber abschalten
Zitat:
|
AW: Codeoptimierung lieber abschalten
Zitat:
Konkrete Beispiele fände ich aber interessant. |
AW: Codeoptimierung lieber abschalten
Zitat:
|
AW: Codeoptimierung lieber abschalten
Zitat:
Delphi-Quellcode:
Das sagt ziemlich wenig, ohne den Rest der Methode, aber selbst wenn ich die hier poste könnte, wäre sie ohne Kontext nur sehr schwer verständlich. Laserdata ist ein Array of TLaserData-Records, die optional initialisiert werden, wenn es die entsprechenden Dateien gibt. FReader wurde vor dem zugehörigen try mit NIL initializiert.
finally
// Wenn Optimization on ist, gibt es in Delphi 2007 eine AccessViolation in TLaserData.Done bei // der Freigabe von FReader. Ohne passiert das nicht. // -- 2021-04-16 twm {$OPTIMIZATION OFF} for LaserNo := Low(LaserData) to High(LaserData) do LaserData[LaserNo].Done; FreeAndNil(TrigStream); FreeAndNil(OutStream); end; Result := FRes; end; {$IFDEF OPTIMIZATION_IS_ON} // Ab hier kann man Optimization wieder einschalten. Frueher - also z.B. direkt nach der // for-schleife ging es nicht. // -- 2021-04-16 twm {$OPTIMIZATION ON} {$ENDIF} procedure TLaserData.Done; begin FreeAndNil(FReader); end; Andere Beispiele (ich meine es waren noch zwei weitere), finde ich nicht, die müssen im Source von einzelnen internen Tools gewesen sein, und davon haben wir zuviele um den mal eben zu grep-en. Obiges Beispiel kann ich noch nicht auf Delphi 10.2 portieren, da es immernoch einen Rechner mit Windows XP gibt, auf dem es laufen muss, deshalb weiß ich nicht, ob der Fehler dort noch auftreten würde. |
AW: Codeoptimierung lieber abschalten
Also ich kann nur sagen, ich benutze die Optimierung immer und bin bisher noch nicht damit gegen eine Wand gefahren. Aber natürlich gibt es immer und überall Fehler, darum testet man ja - sowohl automatisiert als auch mit Menschen.
Hier mal ein paar Beispiele wie Fehler zu handhaben sind: ![]() ![]() ![]() Sherlock |
AW: Codeoptimierung lieber abschalten
Zitat:
Zitat:
|
AW: Codeoptimierung lieber abschalten
Einfach noch eine Config hinzufügen?
Release Debug (wie Release, nur ohne Debuginfos) Und dann kann man nochmal davon ableiten und Varianten mit/ohne Codeoptimierung hinzufügen, oder, wie bereits erwähnt, dann das wenigstens in beiden Configs abschalten, damit man auch das debuggt, was auch der Kunde bekommt. Alternativ mit externen Debuginfos kompilieren ... jenachdem ob die Debuginfodateien (TDS) daneben liegen, ist es mit oder ohne, aber die Programmdateien selber sind immer identisch. |
AW: Codeoptimierung lieber abschalten
Ich meine gehört zu haben :?, dass im Optimierungsfalle Schleifen ggf. in die andere Richtung abgearbeitet werden, was zu 'Seiteneffekten' führen kann.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
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-2025 by Thomas Breitkreuz