Entwickler-Ecke

Sonstiges (Delphi) - Speicher gesprengt! OutOfMemory!


LowSkills - Sa 28.07.07 15:23
Titel: Speicher gesprengt! OutOfMemory!


BenBE - Sa 28.07.07 20:02

Dein Quälkot könnte an zahlreichen Stellen eine starke Optimierung vertragen. So z.B. bei der Server-Auswahl, bei den vergangenen Monaten, ... Das sieht mir sehr danach aus, dass Du vieles an Source immer wieder dupliziert hast. Entferne da erstmal die ganze Redundanz.

Ferner solltest Du mal schauen, an welchen Stellen der Speicher immer wieder reserviert wird. Ein häufiger Fehler ist es, bei Datenbanken Edit oder Insert aufzurufen, ohne mit Post abzuschließen. Ansonsten nutzte einfach mal FastMM4, der finde die wahrscheinlichen Fehlerquellen im Normalfall recht schnell.


LowSkills - So 29.07.07 11:44

ja ja, ist ja schon gut :mrgreen: Hab ja schon verstanden. Du magst mich also nicht :(

Spaß bei seite, bei den Monaten ist natürlich einiges machbar, ebenso an den Serverdingern. Wahrscheinlich hätte ich es auch schon lange geändert, wenn ich wüsste, wie.

Fakt ist, dass ich mittlerweile nur noch an zwei stellen die Datenbank öffne/schliesse, und nicht mehr wie vorher am beginn jeder Procedure, wie ihr ja da sehen könnt.

Werde heute mal versuchen müssen, ob es hilft, wenn ich die Doku reduziere, alternativ mal FastMM4...

Wenn jetzt noch einer so freundlich wäre: Was ist fastmm4??? o.0

Vielen Dank schonmal.


BenBE - So 29.07.07 12:48

Suche bei Google GOOGLE HILFT!


LowSkills - Mo 30.07.07 21:16

Ja ja, ich bins wieder. :autsch:

Auch auf die Gefahr hin, dass ich jetzt wieder einmal einen auf den Deckel bekomme:

Google ist nicht mein Freund! Wir haben uns zerstritten und seit einiger Zeit mit dem Allerwertesten nicht mehr angeschaut.

Spaß bei Seite: Ich bin brav deinem Link gefolgt, BenBE, habe mir dann auch die 4. Revision der Fastmm4 dinger runtergeladen. Leider gehöre ich zu den Menschen, die sich schwer damit tun, etwas zu installieren, das nicht mit einer install.exe daherkommt. Fürderhin gestaltet es sich als schwierig, etwas zu installieren, dass ohne install.exe daherkommt und dessen ReadMe nicht viel Aufschluß bringt bezüglich Fragen wie How-to-install oder so.

Natürlich habe ich mich umgehend bei google informieren wollen, wie man das denn installiert, zu meinem allergrößten Bedauern musste ich allerdings resignierend feststellen, dass Google kein besonders guter Freund von mir ist.

Könnt mir da nochmal jemand helfen?

Bidde...?!


BenBE - Mo 30.07.07 21:53

Naja ... ne Install brauch das auch nicht wirklich. Es sollte reichen alle Dateien, die irgendwie nach Source, oder so ähnlich aussehen, mit in dein Projekt-Verzeichnis zu entpacken, dann in deiner DPR-Datei (Projekt --> Quelltext anzeigen) als erste Unit FastMM4, (vor allen anderen) zu ergänzen und dein Projekt neu zu erstellen.

Ggf. musst Du mal kurz die Unit FastMM4.pas öffnen und ein wenig im Kopf lesen und ein paar Compiler-Schalter deinen bedürfnissen anpassen.


Sinspin - Mo 30.07.07 22:21

du brauchst die folgenden dateien in deinem projektverzeichnis.

FastMM4.pas
FastMM4Options.inc
FastMM4Messages.pas

die FastMM4Messages.pas gibt es ettliche male. und zwar für so ziemlich jede bekanntere landesprache eine.
du holst dir am besten die aus ".\Translations\German\". mit dem meldungen kann mann dann wenigstens was anfangen.

startest du dann den programm über delphi, arbeitest damit und beendest es wieder so findet sich nach dem ende eine textdatei im verzeichnis deiner exe. wenn du glück hast siehst du die ergebnisse aber schon direkt nach dem programm ende in einem fenster (ich hatte noch nicht das glück)

zu deinem quelltext.
jeder fängt mal "klein" an. ich habe früher auch mal solche quelltexte geschrieben. jetzt würden mich solche redundanzen nicht mehr schlafen lassen. :wink:
ansonsten kann ich nichts finden. ist bei dem quelltextumfang auch nicht so einfach. zumal man das ganze ja nicht ausführen kann um mal das laufzeitverhalten beobachten zu können.
was ich mal ganz genau unter die lupe nehmen würde ist die procedure VLG_Kombis.

ansonsten kann ich nur sagen. einfach mal im FMM den FullDebugMode anschalten und schauen was kommt.
allerdings musst du dazu noch die FastMM_FullDebugMode.dll in dein porgrammverzeichnis kopieren.


LowSkills - Di 31.07.07 10:26

Dankeschön. Werd das heute ode morgen mal in Angriff nehmen und hoffen, dass sich was tut.

Im übrigen hast du recht, wenn du sagst, du würdest die procedure VLG_Kombis nochmal unter die Lupe nehmen. Werd ich auch, die funzt nähmlich noch nicht so ganz, wie ich das will. Aber das krieg ich hin. Mit dem Laufzeitverhalten allerdings kann das ja nichts zu tun haben, die ist nähmlich noch gar nicht "on", also scharf geschaltet, fals man das so sagen kann. Werd heut mal schauen, ob ich nen größeren Arbeitsspeicher besorgen kann. Mit 512 MB-Ram ist man ja heute so oder so das ende der Nahrungskette. Vielleicht hilft das ja schon. Muss ich allerdings auch schon wieder in Frage stellen.

Denn: Wenn ich, wie ich feststellen muss, bereits beim ersten Verlag Out Of Memory gerate, könnte es auch bei größerem Speicher problematisch werden, bedenkt man, das die Schleife insgesamt fast 520 Verlage durchläuft.

Da ich allerdings nicht weis, ob die Speicheranforderung ihr Max erreicht, wenn sie das erste mal durchgelaufen ist, kann ich auch nicht sagen, ob der Speicher dannach in trockenen Tüchern wäre und somit Problemlos die andern 519 Verlage durchlaufen würde.
Ich weiss ja nicht, ob der dann bei Verlag noch mehr speicher Verlangt. dann wäre ja auch bei einem riesen Speicher spätestens nach zehn verlagen schluss, net oder?

Vielen Dank aber nochmal an Dich SinSpin, dass du dich so ausführlich mit dem Quellcode auseinandergesetzt hast. Werd später oder morgen mal den aktuellen Quellcode posten, wie er nach dem neuesten Feinschliff aussieht.

Danke schonmal wieder im Vorraus. Und scheut euch nicht, ruhig weiter fleißig lösungsansätze zu finden/posten. :mrgreen:

Was würde ich nur ohne euch machen?!