Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: FireDAC, onDemand, DeadLock

  Alt 8. Jul 2018, 14:04
Aber mit fmAll passiert es nicht.
Bei fmAll werden alle Datensätze an den Client übertragen und der Cursor danach freigegeben. Daher kommt es in diesem Fall nicht zu einem Deadlock. Bei fmDemand bleibt der Cursor aber offen, damit die Next Calls auch klappen.

Ich würde es zunächst auch erstmal mit einem ckStatic Cursor versuchen. Der arbeitet auf einem temporären Snapshot und macht auch keine Locks. Das verlagert den Speicherbedarf allerdings auf den Server, aber der kann da in der Regel besser mit umgehen.

Es gilt aber zu beachten, daß auch bei fmDemand der lokale Speicher ziemlich anwachsen kann, wenn mit den Next-Calls dann doch alle Datensätze irgendwann im Speicher liegen. Dann hilft nur Unidirectional auf True zu setzen, damit der Speicher für die vorigen Datensätze auch gleich freigegeben wird. Sollte das nicht gehen, musst du dir ein Verfahren aussuchen, bei dem die Result-Sets kleiner werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat