Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Unerklärbare Fehlermeldung (https://www.delphipraxis.net/16852-unerklaerbare-fehlermeldung.html)

Berserker 24. Feb 2004 16:07


Unerklärbare Fehlermeldung
 
Hallo liebe Delphi-Gemeinde.

Ich habe heute eine neue Auftrags-Software ausprobiert welche meine Kunden auch einsetzten.
Jetzt ein total komisches Phänomen, was ich mir nicht erklären kann.

Wenn ich die Software auf einem Rechner starte, der mehr als 512 MB Speicher hat dann kommt eine Fehlermeldung und das Programm funktioniert icht mehr. Programmiert ist die Software in Delphi.

http://www.edv-gruner.de/komischemeldung.jpg

Kann mir jemand von euch sagen was das sein könnte bzw. wie man Abhilfe schaffen könnte?
Ich wäre für jeden Tipp oder Ratschlag dankbar.

MfG, Ronny

mirage228 24. Feb 2004 16:20

Re: Unerklärbare Fehlermeldung
 
Code:
Entscheidungswürfel
Vielleicht ist ja eine Zufallsgeneratorkomponente oder die Prozedur Random gemeint.
Ruft du sowas vielleicht wiederholt auf?

mfG
mirage228

sakura 24. Feb 2004 16:24

Re: Unerklärbare Fehlermeldung
 
Entscheidungswürfel - ist das dieser DB Decision Cube :?:

...:cat:...

Markus K. 24. Feb 2004 16:28

Re: Unerklärbare Fehlermeldung
 
Hi Berserker,
schaue doch mal in der DelphiHilfe nach, da wirst du bestimmt fündig :zwinker: .

PS:Gab/Gibt es bei MS Access nicht mal ein ähnliches Problem, wo Datenbanken ab einer bestimmten Größe nicht geöffnet werden konnten?

Tschüß Markus

Berserker 24. Feb 2004 16:32

Re: Unerklärbare Fehlermeldung
 
Hallo.

Danke erstmal für eure Antworten.
Ich habe in der Hilfe mal nachgelesen, nur leider weis ich nicht wie ich das Problem beheben soll.
Den Source für die Anwendungssoftware Premium habe ich ja nicht.
Kann man nicht irgendwo im Windows was umstellen, das es funktioniert?

MFG, Ronny

sakura 24. Feb 2004 16:38

Re: Unerklärbare Fehlermeldung
 
Zitat:

Zitat von Berserker
Kann man nicht irgendwo im Windows was umstellen, das es funktioniert?

Versuche einfach mal ein Programm zu schreiben, welches einfach "etwas überflüssigen" Speicher belegt und schaue mal, was dann passiert.

...:cat:...

Matze 24. Feb 2004 16:42

Re: Unerklärbare Fehlermeldung
 
[OT]Falls du's nicht schafft, hilft dir sakura sicher gerne, er hat ein vorher eins geschrieben, was über 400 MB belegt hat. *petz* :mrgreen:

Berserker 24. Feb 2004 22:31

Re: Unerklärbare Fehlermeldung
 
Hallo.

Also ich habe mal Photoshop gestartet und an die 70 Bilder geöffnet. Somit war nur noch 470 MB Speicher frei.

Komischerweise funktionierte es dann auf einmal.

Ich verstehe nur nicht wieso das Programm nicht mit mehr Arbeitsspeicher funktioniert. :gruebel:

MfG, Ronny

dizzy 25. Feb 2004 00:13

Re: Unerklärbare Fehlermeldung
 
Vielleicht hast du dann SO viel RAM frei, dass der im Programm verwendete Zähler diese Zahl nicht mehr darstellt, und ins Negative umschlägt, oder von vorne zu zählen beginnt. Das würde mir als erstes einfallen... so völlig spontan. Würde sicherlich nicht für die Entwickler der Software sprechen :mrgreen:

gruss,
dizzy

Luckie 25. Feb 2004 00:44

Re: Unerklärbare Fehlermeldung
 
Na das glaube ich wohl weniger. Windows weißt einem Prozess einen Adressraum von 4 GB zu. Davon bekommt 2 GB das System. Ein Prozess hat also 2 GB zur Verfügung und die kann ich auf 32-Bit Systemen mit einem Integer ansprechen. Bzw. andersrum wird ein Schuh draus, der Prozess hat 2 GB, weil man genau so viel mit einem Integer auf 32-Bit Systemen ansprechen kann.

dizzy 25. Feb 2004 01:13

Re: Unerklärbare Fehlermeldung
 
Na vielleicht speichern die die Größe des verfügbaren RAM's nicht in nem Integer, sondern n schnuckeliges Byte oder wahrscheinlicher Word oder so. Gibt alles auf dieser Welt - mich erschüttert (fast) nix mehr :zwinker:

Wird der virtuelle Adressraum auch dann mit 2Gig vergeben, wenn man die Swap-Datei auf 64MB nagelt, und nur 256MB RAM hat!? Das wäre ja gerade zu über-optimistisch.

Aber irgend etwas in diese Richtung muss es sein. Sonst ließe sich das Phänomen für mich gerade nicht mehr klären. Ist meine einzige (vielleicht etwas dumme) Idee z.Zt.
Oder was gäbe es da noch? :gruebel:


\edit:
Zitat:

Zitat von Luckie
Ein Prozess hat also 2 GB zur Verfügung und die kann ich auf 32-Bit Systemen mit einem Integer ansprechen.

Wie kann dann Delphi meinen, dass eine Variable nicht größer als 4 Gig werden kann, wenn doch effektiv nur 2 zur Verfügung stehen? Und ein 32-Bit-Integer hat bei mir 4.294.967.295 positive Zustände (so er unsigned ist) => 4 Gig. Oder gibt's 4 Gig für ein jeden Prozess, aber 2 werden schon mal pro forma für Win abgezogen, könnten aber, wenn sie wollten, vom Programm genutzt werden? Mein Speicher-Managment-Bild in meinem Hirn verkrempelt sich grad :freak:
Wie läuft das jetzt genau?

Luckie 25. Feb 2004 01:22

Re: Unerklärbare Fehlermeldung
 
2 GB Adressraum, nicht mehr und nicht weniger. Und zwar spricht man von virtuellen Speicher. Der erst auf real vorhandenen physischen "gemappt" wird, wenn drauf zugegriffen wird. Dann tritt folgender Mechanismus in Kraft:
Und zwar geht das seitenweise. Unter Windows 32-Bit Intel hat eine Seite 4 KB im Speicher. Ist jetzt noch was frei wird einfach gemappt. Ist nichts mehr frei, kuckt Windows welche Seiten nicht mehr gebraucht werden und lagert diese in den PageFile auf der Festplatte aus. Unterscheidet sich die Seite im RAM von der im PageFile wird geschrieben ist das nicht der Fall wird einfach die benötigte Seite in den RAM geschrieben. Ist eine Seite nicht im RAM verfügbar und muss nachgeladen werden, spricht man von Seitenfehlern.

Luckie 25. Feb 2004 01:24

Re: Unerklärbare Fehlermeldung
 
Die Größe eines Integers wird nicht von Delphi, sondern von der Rechnerarchitektur bestimmt. Unter 64-Bit hat ein Integer eine größe von 64-Bit.

Sag ich doch, 2 GB kann ich mit einem 32-Bit Integer ansprechen. Rein theoretsich sogar 4 GB nur was will ich da? Windows stellt mir doch effektiv eh nur 2 GB zur Verfügung.

dizzy 25. Feb 2004 01:43

Re: Unerklärbare Fehlermeldung
 
Zitat:

Zitat von Luckie
2 GB Adressraum, nicht mehr und nicht weniger. Und zwar spricht man von virtuellen Speicher. Der erst auf real vorhandenen physischen "gemappt" wird, wenn drauf zugegriffen wird. Dann tritt folgender Mechanismus in Kraft:
Und zwar geht das seitenweise. Unter Windows 32-Bit Intel hat eine Seite 4 KB im Speicher. Ist jetzt noch was frei wird einfach gemappt. Ist nichts mehr frei, kuckt Windows welche Seiten nicht mehr gebraucht werden und lagert diese in den PageFile auf der Festplatte aus. Unterscheidet sich die Seite im RAM von der im PageFile wird geschrieben ist das nicht der Fall wird einfach die benötigte Seite in den RAM geschrieben. Ist eine Seite nicht im RAM verfügbar und muss nachgeladen werden, spricht man von Seitenfehlern.

Dass heisst Windows geht erstmal fröhlich davon aus, dass es auslager KANN, und zwar zunächst unbegrenzt (jetet global für alle Prozesse), und vergibt zunächst ein und den selben Bereich für mehrere Prozesse. Nutzt einer dieser Prozesse diesen Bereich (oder zum Teil), so wird er den anderen entzogen, und um-gemappt. Und wenn Win jetzt an die Grenze des gesamten Speichers (RAM+PageFile) stößt, gibbet eine entsprechende Meldung wenn darüber hinaus was passieren soll. Sehe ich das richtig?
Dann würde Win ja bei einer Gesamtspeicher-Größe von unter 2 Gig schon von vorne herein mehr versprechen als überhaupt möglich! Klingt nach echter Politik ;)

Zitat:

Zitat von Luckie
Die Größe eines Integers wird nicht von Delphi, sondern von der Rechnerarchitektur bestimmt. Unter 64-Bit hat ein Integer eine größe von 64-Bit.

... des is klar :roll: *g*

Zitat:

Zitat von Luckie
Sag ich doch, 2 GB kann ich mit einem 32-Bit Integer ansprechen. Rein theoretsich sogar 4 GB nur was will ich da? Windows stellt mir doch effektiv eh nur 2 GB zur Verfügung.

Stimmt, so hab ich das jetzt nicht gesehen. Wenn ich 4 Gig addressieren kann, kann ich latürnich auch 2 Gig addressieren. Aber dann ist die Größe eines Integers eher sekundär verantwortlich. Windows könnte ja auch sagen: Ich brauche 3 Gig, die Prozesse bekommen halt nur einen.


Danke dir für das kleine Interludium! :dp:

\edit: quote-tags vermurkst...

\edit2: An dieser Stelle mal ein Danke u.A. für LuckieDips! Bin ein viel-bildschirm-umschalter, und das verduselt mir immer meine Icons. JETZT NICHT MEHR! *drüx* :thuimb:

Luckie 25. Feb 2004 02:06

Re: Unerklärbare Fehlermeldung
 
Zitat:

Zitat von dizzy
Dass heisst Windows geht erstmal fröhlich davon aus, dass es auslager KANN, und zwar zunächst unbegrenzt (jetet global für alle Prozesse), und vergibt zunächst ein und den selben Bereich für mehrere Prozesse. Nutzt einer dieser Prozesse diesen Bereich (oder zum Teil), so wird er den anderen entzogen, und um-gemappt. Und wenn Win jetzt an die Grenze des gesamten Speichers (RAM+PageFile) stößt, gibbet eine entsprechende Meldung wenn darüber hinaus was passieren soll. Sehe ich das richtig?
Dann würde Win ja bei einer Gesamtspeicher-Größe von unter 2 Gig schon von vorne herein mehr versprechen als überhaupt möglich! Klingt nach echter Politik ;)

Es ist schwer zu erklären. Du musst zwischen virtuellen und real vorhandenen physischen Speicher unterscheiden. Nehmen wir mal zwei Prozesse A und B. Beide haben eine globale Integer Variable deklariert. Die können jetzt im Speicher an der gleichen fiktiven Adresse $FFFF für den jeweiligen Prozess stehen. Und es wird nichts überschrieben und Prozess A liest nicht die Variable von Prozess B und umgekehrt. Beide Prozesse haben keinen Zugriff auf den virtuellen Speicher des jeweiligen anderen Prozesses, ja sie sehen ihn noch nicht mal. Soll jetzt aber die CPU damit arbeiten, muss die Variable im physichen Arbeitsspeicher stehen und da geht das Kopieren von den Seiten los. Nehmen wir weiter an es gibt nur diese zwei Prozesse im ganzen System und ich habe nur ganz wenig Arbeitsspeicher. Nehmen wir an die Variable von Prozess B ist im Arbeitsspeicher. Prozess A bekommt jetzt Rechenzeit zugeteilt. Die Variable von Prozess B wird nicht mehr gebraucht, also wird sie in den PageFile geschrieben und die Variable von Prozess A an die Stelle im Arbeitsspeicher kopiert, wo vorher die Variable von Prozess B stand.

mikhal 25. Feb 2004 05:18

Re: Unerklärbare Fehlermeldung
 
Handelt es sich bei dem Programm um ein 16-bit-Programm? Alte - für Windows 3.x - programmierte Programme haben häufig Probleme mit großem Speicher. Ich besitze z.B. eine uralt-Version des S-Designors, bei dem das Installationsprogramm bereits mault, daß ich zu wenig Speicher hätte, weil er -1598 MByte Speicher ermittelt...

Grüße
Mikhal

dizzy 25. Feb 2004 12:03

Re: Unerklärbare Fehlermeldung
 
Ja möööönsch, GENAU sowas meine ich doch :mrgreen:

[OT]
@Luckie: Dann hab ich das an sich ja richtig im Hinterkopf. Mein eigentliches Problem ist weniger das Management an sich, sondern eher die Tatsache, dass Win jedem Prozess 2 Gig "verspricht", selbst wenn RAM+PageFile zusammen nicht so viel hergeben. Zumindest würde es nach meinem Wissensstand nach so sein. Und wenn's dann mal nicht mehr passt, weil der gesamte Speicher bereits alloziiert ist, sagt Win schnell per Messagebox bescheid (hat es bei mir schon des Öfteren...).
[end of OT]

Luckie 25. Feb 2004 12:07

Re: Unerklärbare Fehlermeldung
 
Die 2 GB sind ja virtuell und die hat es immer.

roderich 25. Feb 2004 12:27

Re: Unerklärbare Fehlermeldung
 
denke auch, daß Dizzy's Vermutung stimmen könnte. "Zuviel" wird dann plötzlich "zuwenig".
Auch unsere Auftragsverwaltung (eigentlich Windows 32bittig entwickelt) meldet ab und zu zuwenig virtuellen Speicher auf der Platte. Auf dieser (Linux-)Partition waren aber 76 GB frei. Möglicherweise läuft wirklich eine dumm codierte Speicherermittlung über und schlägt ins Negative um.

Roderich

dizzy 25. Feb 2004 13:03

Re: Unerklärbare Fehlermeldung
 
Zitat:

Zitat von Luckie
Die 2 GB sind ja virtuell und die hat es immer.

Solange sie virtuell bleiben klar. Nur wenn auf einmal der komplette Bereich von 2 Gig auf 512MB RAM und ein fixes PageFile von 512MB angefordert, und somit auf reale Adressen gemapped wird, hat's ein Problem, oder nicht? Irgendwo müsste ja das über-bleibende Gig noch hin - nur RAM ist voll, und PageFile auch. Dass heisst, dass ein Prozess u.U. garnicht den ganzen Bereich nutzen kann, der ihm zugesichert wird, da er schlicht weg nicht existiert.
Und eine Verfügbarkeitsprüfung muss sich ja nicht auf den vietuellen Speicher beziehen, sondern kann (wie wahrscheinlich in diesem Fall geschehen) sich auf das phys. RAM beschränken. Das tut Windows ja auch, wenn man sich die Systemresourcen im Taskmanager anguckt. Und wenn dort ein zu großer Wert erscheint, so könnte ein ungeeigneter Datentyp mit diesem Wert gefüttert doch fröhlich umschlagen!?


gruss,
dizzy

Luckie 25. Feb 2004 13:06

Re: Unerklärbare Fehlermeldung
 
Nun ja. So genau weiß ich das auch nicht. Da muust du bei MS den verantwortlichen Programmierer fragen, der das Speichermanagment entwickelt hat. ;)

dizzy 25. Feb 2004 14:22

Re: Unerklärbare Fehlermeldung
 
Zitat:

Zitat von Luckie
Nun ja. So genau weiß ich das auch nicht. Da muust du bei MS den verantwortlichen Programmierer fragen, der das Speichermanagment entwickelt hat. ;)

Werde ich tunlichst nicht. Dann muss ich ja versuchen zu verstehen, was der schreibt... und sooo tief steck ich bei weitem nicht drin ( :wiejetzt: )

Mir soll zunächst genügen, dass ich etwaige Probleme wie der Thread-Ersteller nocht nicht hatte :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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