Announcement

Collapse
No announcement yet.

Zuwenig Arbeitsspeicher ...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zuwenig Arbeitsspeicher ...

    Hallo,

    ich habe hier mit einem merkwürdingen Phänomen zu kämpfen. Die Fehlermeldung "Zuwenig Arbeitsspeicher..." ist ja bekannt und normalerweise durch Hochsetzen von SharedMemSize zu beheben. Das klappt auch i.d.R., aber nicht immer.

    Ich verwende z.B. abgeleitete Datenmodule, die jeweils 3 tTable-Objekte öffnen. Je nach Rechner und Betriebssystem komme ich bei SharedMemSize = 4096 auf folgende Werte:

    Windows 98/Windows NT 4 SP5/3 NT2000-Recher: 11 Datenmodule
    4 andere NT-2000-Rechner: 6 Datenmodule

    Eine Verdopplung von SharedMemsize bewirkt auch eine Verdopplung der gleichzeitig offenen Datenmodule, außer bei den 4 NT-2000-Rechnern. Dort bleiben 6 Datenmodule das Maß aller Dinge. Hochsetzen sämtlicher Werte hat bisher nichts geholfen.

    Ich habe daraufhin andere Konfigurationsdateien probiert. Eine davon, die mit den konservativsten Werden wie SharedMemSize = 2048 und MaxFileHandles aufwartet, kommt auf 9 Datenmodule.

    Auch das Setzen der Shared-MemLocation auf 0x5bde hat nichts geholfen (war ein Tipp aus der Borland-BDE-Newsgroup). Das Problem bleibt auch bei Verwendung der BDE 5.11GE bestehen, ansonsten nehme ich immer noch die 5.01.

    Weiß jemand Rat?

  • #2
    Hallo,

    werden denn wirklich alle Datenmodule immer zur gleichen Zeit parallel benötigt? Ich gehe immer so vor, dass zusammen mit dem zur Laufzeit erzeugten Formular auch das dazugehörende Datenmodul erst zur Laufzeit erzeugt wird, wobei am Ende sowohl das Formular als auch das Datenmodul wieder zerstört wird. Alle diese nur zeitweise aktiven Datenmodule greifen auf das Hauptdatenmodul zu, um dessen Datenbankverbindung zu nutzen

    Comment


    • #3
      Hallo,

      unser Produkt besteht aus einer Vielzahl von Modulen, die ihre Daten in verschiedenen Verzeichnissen speichern. Normalerweise werden nur 3 oder 4 Module zur gleichen Zeit benötigt. Im Extremfall aber jetzt schon 7 und weitere Module werden folgen!

      Was ich nicht verstehe, ist daß das Verhalten bei den Rechnern so unterschiedlich ist. Zunächst dachte ich, es läge an Windows 2000, aber jetzt ist auch ein NT-4-Rechner dabei, der mit dem diesem Problem zu kämpfen hat.
      Wofür braucht die BDE überhaupt soviel Platz für die paar Tabellen. In einer früheren 16-Bit-Applikation mit der 16-Bit wurden bis zu 30 Tabellen gleichzeitig betrieben. Da reichte es lediglich die File-Handles in der Config.sys zu erhöhen.

      Zur Zeit behelfe ich mir damit, daß ich eine spezielle CFG-Datei vor dem Start in das BDE-Verzeichnis kopiere. Mit dieser Datei sind genau 9 Datenmodule möglich und zwar auf jedem Rechner!!! Bei dieser sind die Werte sehr konservativ eingestellt (SharedMemsize auf 2048) und MaxFileHandles auf 48). Eine Erhöhung dieser Werte bringt komischerweise auch keinen Effekt, es bleiben immer 9 Datenmodule.

      Es muß noch weitere Faktoren geben, bloß wo?

      Cia

      Comment


      • #4
        Hallo,

        wieviel Prozesse werden unter NT/2000 im Taskmanager angezeigt, gibt es an dieser Stelle einen Unterschied zwischen den einelnen Rechnern? Was passiert, wenn so viele Anwendungen wie möglich versuchsweise geschlossen werden (gerade in der TBNA (Taskbar Notification Area) tummeln sich oftmals eine Handvoll Symbole, die nicht immer wirklich benötigt werden)? Was passiert, wenn versuchsweise einige Dienste gestoppt werden, die man nicht unbedingt benötigt

        Comment


        • #5
          Hallo,

          hat wohl damit nichts zu tun. Es laufen keine anderen Programme und ich habe alle Dienste ausgeschaltet, die auszuschalten waren.
          Wenn Sie Interesse haben, könnte ich Ihnen ein Testprogramm zumailen. Wie lautet Ihre eMail-Adresse?

          Cia

          Comment


          • #6
            Hallo,

            diese Info (<i>[email protected]</i>) kann hier im Forum mit einem Mausklick auf meinen blau hervorgehobenen Namen abgefragt werden. Ich kann allerdings nichts versprechen ;-

            Comment


            • #7
              Hallo,

              das Programm generiert über die private Funktion <i>ErzeugeDM</i> mehrere Instanzen des gleichen Datenmoduls, wobei in jeder Instanz sowohl TDatabase, TSession und 3 TTables verwendet werden.
              <pre>
              function ErzeugeDM;
              Var
              i : Integer;
              S : String;
              begin
              PruefeDatenpfad(aDatenPfad);
              aDatenpfad:=Datapath;
              Result:=tDM.Create(Application);
              With Result do
              begin
              ...
              end
              end;
              </pre>
              Normalerweise würde man jedoch ein Hauptdatenmodul verwenden, bei dem TDatabase+TSession die Verbindung zur Datenbank aufbauen, aber ansonsten die restlichen Datenmodule, die erst bei Bedarf erzeugt/zerstört werden, nur die TTable/TQuery-Instanzen enthalten. Alle anderen Datenmodule greifen auf das Hauptdatenmodul zurück, um TDatabase+TSession mitzunutzen.

              Da bis auf <i>dmCommon</i> keine Sourcecodedateien nutzbar sind, kann ich auch nicht schrittweise den Ort eingrenzen, an dem die Exception ausgelöst wird. Das Programm meldet zwar keine, wird die EXE jedoch in <b>windbg.exe</b> (aus dem Microsoft Platform SDK) ausgeführt, wird dort eine ausgelöste Exception mitprotokolliert. Ich würde daher an Ihrer Stelle das Projekt mit aktivierten Debug-DCUs compilieren und dann schrittweise durch die VCL gehen, bis sich das Problem konkret bemerkbar macht. <br>
              Das Nutzen einer zweiten TSession+TDatabase-Instanz ist nur dann zwingend notwendig, wenn diese Zugriffe in einem separaten Thread ablaufen sollen. <br>
              Außerdem werden im Programm zur Laufzeit einige BDE-Konfigurationsdateien umgebogen, ohne die Anwendung neu zu starten. Es wäre einen Versuch wert, auch dieses auszukommentieren und das Ganze neu zu testen

              Comment


              • #8
                Hallo Herr Kosch,

                grundsätzlich haben Sie schon recht wenn Sie sagen, daß 1 tDatabase+tSession reicht und nur weitere Tabelleninstanzen benötigt werden. Das gilt aber nur dann, wenn nur auf 1 Datenverzeichnis zugegriffen wird.

                Ich benötige aber 8-10 Datenverzeichnisse, die unangenehmerweise auch netzwerkmäßig benutzt werden. Dann muß gewährleistet sein, daß die LCK- und NET-Dateien im gleichen Verzeichnis stehen. Das läßt sich wiederum nur durch eine Extrasession+ExtraDatabase verwirklichen.

                Wieviel Datenmodule konnte DMTEST denn bei Ihnen erzeugen? Waren die beschriebenen Effekte auch bei Ihnen feststellbar?

                Herlichen Dank nochmal für Ihre Bemühungen. Das findet man nicht oft, daß einem in solch kompenteter Weise geholfen wird.

                Viele Grüße

                Comment


                • #9
                  Hallo,

                  auf meinen Rechner (Windows 2000 Professional SP1; BDE 5.11) mit 256 MByte RAM wurden beim ersten Aufruf nur 4 Datenmodule erzeugt, bei allen späteren Aufrufen nur 3 Module.

                  P.S: Wo wird denn nun die Exception ausgelöst

                  Comment


                  • #10
                    Hallo,

                    die Exception wird beim checken der BDE-Konfiguration ausgelöst:

                    Check(DbiOpenCfgInfoList(nil, dbiREADONLY, cfgPERSISTENT, StrPCopy(Temp, Path), hCur));

                    Das ist die Beispielroutine GetConfigParameter aus der Delphi-Hilfe, um die BDE zu konfigurieren.
                    Ich hab dann mal probehalber die BDE-Konfiguration unverändert gelassen, dann kam in der Routine TesteDateien beim Öffnen der Tabelle "tbl" die Exception.
                    Scheint fast so, als hätte es etwas mit verfügbaren File-Handles zu tun. Ich dachte eigentlich, daß diese in Windows 2000 prof. unbegrenzt zur Verfügung stehen. Eine Config.sys gibts ja da nicht und die Config.nt gilt nur für 16-Bit-Applikationen.

                    Reagiert denn dmTest bei Ihrem Rechner auf Änderungen an SharedMemSize?

                    Cia

                    Comment


                    • #11
                      Hallo,

                      offiziell müssen alle Anwendungen, die auf die BDE zugreifen, nach jeder Änderung der Konfiguration gemeinsam geschlossen und neu gestartet werden. Daher ist die Änderung im eigenen Programm sowieso etwas problematisch.

                      P.S. Wenn eine FAT16-Partition zur Verfügung steht, was passiert, wenn die Paradox-Tabellen dort untergebracht werden? Borland hat einige Probleme auf NTFS-Partitionen eingeräumt

                      Comment


                      • #12
                        Hallo,

                        das Setzen der Konfigurationseinstellungen ist nur eine Vorsichtsmaßnahme und wird ja nur dann ausgeführt, wenn LOCAL SHARE auf FALSE und SharedMemsize < 4096 ist. Wenn die BDE von uns installiert wird, sind diese Werte sowieso schon korrekt gesetzt.

                        Das Filesystem hat keine Auswirkung auf die Datenmodule. Fat16 habe ich zwar nicht mehr, aber Fat32 reagiert genauso wie NTFS oder auf dem Netzwerk.

                        Ich hoffe, daß die erwähnte Probleme mit NTFS-Partitionen ein verspäteter April-Scherz sind. Wir arbeiten hier in der Firma fast ausschließlich mit NTFS-Partitionen, haben aber eigentlich nichts ungewöhnliches feststellen können.

                        Die BDE hab ich langsam leid. Wir planen den Umstieg auf dbISAM. Haben Sie schon damit Erfahrungen gemacht?

                        Viele Grüße

                        Comment


                        • #13
                          Hallo,

                          das NTFS-Problem ist leider kein Scherz, es macht sich bemerkbar, wenn die Paradox-Tabellen sehr viele MBs Platz belegen.<br>
                          Warum wird nicht der Einsatz der OPEN SOURCE-Datenbank <b>InterBase 6</b> in Betracht bezogen

                          Comment


                          • #14
                            Hallo,

                            unsere Programme müssen leider auch für schmalbrüstige Rechner ausgelegt sind. Unsere Kundschaft benutzt teilweise noch Win95-Rechner mit 32 MByte. Da ist wohl eine SQL-Datenbank etwas überdimensioniert und auch nicht so einfach zu warten wie die BDE.
                            Dazu kommt, daß unsere Programme stark browserorientiert arbeiten, was wiederum eine große Schwäche von SQL-Datenbanken ist. Eine große Adressentabelle mit 10000 Einträgen erscheint mit der BDE in Windeseile, in SQL müßte erst einmal eine temporäre Tabelle erzeugt werden :-(

                            Ciao

                            Comment


                            • #15
                              Hallo Herr Kosch,

                              die Lösung ist gefunden, gelobt sei der Tag.
                              Man braucht nur in der BDE-Verwaltung in den Optionen den Schalter "Speichern für die Verwendung mit" auf "Nur Windows 95/NT" zu setzen!
                              Dann reagiert das Testprogramm auch auf die unterschiedlichen Eingaben bei SharedMemSize. Hat ein Kunde von uns zufälligerweise herausgekriegt.

                              Schönes Wochenende

                              Comment

                              Working...
                              X