AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

IBAlloc out of memory

Ein Thema von stalkingwolf · begonnen am 13. Jan 2021 · letzter Beitrag vom 15. Jan 2021
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
327 Beiträge
 
#1

IBAlloc out of memory

  Alt 13. Jan 2021, 13:57
Datenbank: FB • Version: 2.5.1 • Zugriff über: IBX
Nachdem ich mir den IBX Code ausgelagert habe und nun selber übersetzten kann habe ich mir einmal die Problematik "Zu wenig Arbeitsspeicher" "Out of Memory" angeschaut.

In der IB.pas in der Funktion IBAlloc knallt es irgendwann bei ReallocMem(Pointer(P), NewSize) wenn NewSize ca den Wert von 262764000 erreicht hat. IBAlloc hat sich von D6 bis 10.1 quasi nicht geändert und es gibt auch keinerlei Plausibilitätschecks. Es knallt einfach.

Die vorausgehende Funktion ist AdjustPosition in IBCostumDataSet.
Ich bin am überlege wie ich das Problem abfange. Wir nutzten nämlich in diversen Programm TIBDataset und das Ding müllt sich einfach immer weiter zu, bis es irgendwann knallt.

Im Netz habe ich folgendes noch gefunden :
http://www.codenewsfast.com/cnf/thre...hr-ng1932q1236
Wobei ich denke das die erwähnten Codeschnippsel in XE4 implementiert sind und mit nichts zu tun hat.

Jemand sich schon einmal beschäftigt?
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
481 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: IBAlloc out of memory

  Alt 14. Jan 2021, 11:48
Sollte man nicht was "moderneres" als IBX für den Zugriff auf Firebird-Datenbanken verwenden? Denke mit IBDAC, Firedac o. ä. hat man solche Probleme nicht.

Wir benutzen wo es geht IBDac, ist relativ einfach.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
327 Beiträge
 
#3

AW: IBAlloc out of memory

  Alt 15. Jan 2021, 08:56
Moin,

Nett gemeint, aber bringt mir nichts, weil wir bestehenden Code besitzen welcher uns die Probleme macht.

Wie wir das mittlerweile vermeiden wissen wir. Anfang wurde aber ... naja großzügig programmiert.
Das Problem in IBAlloc bzw. IBCustomDataSet ist sogar noch in den neuesten 10.* Delphi Versionen.
Es wurde nie anders implementiert. Das Ding fragt einfach Speicher für RecordNumber * BufferSize ( Länge des Datensatzes ermittelt aus den Feldlängen ) an. Ausnahme ist nur unidirectional in dem ein MOD 2 auf RecordNumber gesetzt wird.

Dann wird stumpf beim einlesen mit ReallocMem der Speicher angefordert und es knallt.

Ich finde 17 Jahre alte Mailinglisten Einträge mit dem Problem. Aber der Entwickler ging da sehr stumpf drüber. Nach dem Motto, Szenario selber Schuld, was in den HEAP passt wird angefordert, sonst scheppert es.


Für die Zukunft schau ich mir das mit IBDac aber einmal an.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf