Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.925 Beiträge
 
Delphi 12 Athens
 
#7

AW: Out of Memory Exception?

  Alt 2. Aug 2023, 11:12
EoutOffmemory bzw. Systemfehler 8
kann auch passieren wenn die Windows Atomtabelle voll ist!
lässt sich provuzieren wenn mein ein windows mit endlicher Atomtabelle verwendet und
einen Dienst programmiert der viele instanzen von einem
Programm mit Twincontrols und anderen resourcen die Handle brauchen startet und kontrolliert.

Diensten stehen nur sehr wenige Heap-Resourcen in der Atomtabelle zu.
Aber man kann die Größe der Atomtabelle anpassen, in der Registry...
Code:
HKLM\System\CurrentControlSet\Control\Session Manager\SubSystem\windows
Die zeichen kette in einen Texteditor kopieren und folgenden text suchen und anpassen
Code:
SharedSection=1024,20480,768
Die Zahlen hinter SharedSection können je nach Windows version andere sein.
Code:
SharedSection=x,y,z
x maximale größe des systemweiten Heap in Kilobytes
y Größe jedes Desktop-Heaps. Das sollte sich in modernen Windows versionen automatisch passend erhöhen...
z Größe jedes Desktop-Heaps für nicht interaktive Window-Instanzen aka Dienste. Die kann zu klein sein. Leider betrifft es dann immer alle Dienste auch wenn nur einer diese Änderung braucht.



Und wenn man Delphi 2007 verwendet dann leacked Controls.Pas auch noch mit atomtabellen einträge die nicht mehr wieder gewonnen werden können...
Wenn man so ein programm immer wieder startet und beendet dann friert irgenwann dein Windows ein.
Delphi-Quellcode:
//D2007 Controls.pas
ControlAtomString := Format('ControlOfs%.8X%.8X', [HInstance, GetCurrentThreadID]);//es war irgendwas dynamisches diese zeile ist aus D XE11 aber es war etwas ähnliches in d2007
RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));// dieser eintrag wird NICHT aufgeräumt wenn das programm beendet wird.
Delphi-Quellcode:
//D XE 11.x Controls.pas
RM_GetObjectInstance := RegisterWindowMessage(PChar('DelphiRM_GetObjectInstance'));// dieser Eintrag führt glaube ich nur zu einem einmaligen leak.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 2. Aug 2023 um 11:38 Uhr)
  Mit Zitat antworten Zitat