Skip to main content
Skip table of contents

DBGetDataModuleFromPool()

DBGetDataModuleFromPool() – DatenModul anfordern

Die Funktion liefert ein DatenModul-Objekt (TBeDbGet) aus dem DatenModul-Pool und stellt die Laufzeit-optimierte Variante zu CreateObject('TBeDBGet') dar. Das DatenModul-Objekt bleibt solange für den Aufrufer reserviert, bis es mit DBReturnDataModuleToPool() freigegeben wird. Weitere Aufrufe von DBGetDataModuleFromPool() vor DBReturnDataModuleToPool() liefern oder erzeugen zusätzliche DatenModul-Objekte.
Im be Client ist der Einsatz des DatenModul-Pools besonders dann sinnvoll, wenn ein Datenmodul innerhalb einer Sitzung bisher immer wieder angelegt und anschließend wieder zerstört wird.
Für häufig verwendete Kombinationen von Tabellen kann durch Angabe eines selbst gewählten Alias ein separater Typ von DatenModulen angelegt werden. Wird ein DatenModul mit diesem Alias aus dem Pool angefordert, dann wird ein DatenModul geliefert, bei dem die gewünschten Tabellen bereits geöffnet sind, was einen erheblichen Laufzeitgewinn bedeutet. Dies wird erreicht durch die Wiederverwendung von DatenModul-Objekten, die wieder zurückgegeben wurden.
Bei Verwendung des DatenModul-Pools auf dem beas mit eigenen Aliasen ist der Laufzeitgewinn gegen die Resourcenbelegung abzuwägen, da pro User / Abteilung / Standort-Kombination, für die ein Request bearbeitet wird, ein neues DatenModul angelegt wird und bis zur Beendigung dieser beas Instanz erhalten bleibt. Die ADS Connection, die für dieses DatenModul angelegt wird, bleibt ebenfalls reserviert. Um die Resourcenbelegung abzuschätzen ist dies noch mit der Anzahl der vergebenen Aliase zu multiplizieren.

Hinweise


DatenModul-Objekte, die mit DBReturnDataModuleToPool() erzeugt wurden, dürfen NIE über DestroyObject() gelöscht werden. Sie müssen unbedingt mit DBReturnDataModuleToPool() zurückgegeben werden.
Events werden nach DBReturnDataModuleToPool() nicht mehr ausgeführt.
Die Verwendung von Objektvariablen nach DBReturnDataModuleToPool() ist nicht mehr zulässig und kann zu falschen Ergebnissen führen.
Vor Rückgabe eines DatenModul-Objekts an den Pool muss die Transaktion beendet werden.
Eine Änderung der Objekteigenschaften ist zwar möglich, muss jedoch vor DBReturnDataModuleToPool() rückgängig gemacht werden!
Events, Indices, Scopes, Ranges und Filter dürfen zwar auf den benutzten Tabellen zugewiesen bleiben, werden aber automatisch entfernt.
Es muss durch Fehlerauffangroutinen sichergestellt werden, dass für jeden DBGetDataModuleFromPool()-Befehl ein zugehöriger DBReturnDataModuleToPool()-Befehl ausgeführt wird!

Parameter

Beschreibung

cAliasName:C

Alias; Ist der Parameter nicht vorhanden oder leer, wird intern '*' als Default verwendet.

Rückgabewert


Objekt - DatenModul (TBeDbGet)

Beispiel

CODE
// Performance-Vergleich DBGetDataModuleFromPool() / CreateObject('TBeDBGet')

| aDab010, i, aTime, aCount, aBeOpenTime, aOpenTime, oBeDBGet|

aCount := 5,

aTime := GetExTimer(),
for i := 1 to aCount do
   oBeDBGet := DBGetDataModuleFromPool(),
   aDab010 := DBGetTable(oBeDBGet, waDab010),
//   aDab010 := BeOpen(waDAB010),
   startseq,
      DbGoTop(aDab010),
      Writeln(aDab010:ArtNr)
   always,
      DBReturnDataModuleToPool(oBeDBGet),
   stopseq,
next,
aBeOpenTime := Str(GetExTimer() - aTime),
aTime := GetExTimer(),
for i := 1 to aCount do
   oBeDBGet := CreateObject('TBeDBGet'),
   aDab010 := DBGetTable(oBeDBGet, waDab010),
   //aDab010 := DBOpen(waDAB010),
   startseq,
      DbGoTop(aDab010),
      Writeln(aDab010:ArtNr)
   always,
      DestroyObject(oBeDBGet)
   stopseq,
next,
aOpenTime := Str(GetExTimer() - aTime),

WriteLn(Replicate('=',  2*aCount) + crlf +
        'Tabelle DAB010 ' + Str(aCount) + ' Mal öffnen:' + crlf +
        'aus Cache: '     + Chr(9) + aBeOpenTime + crlf +
        'konventionell: ' + Chr(9) + aOpenTime + crlf +
        Replicate('=',  2*aCount)),

Weitere Verknüpfungen


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.