Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#15

AW: WebModule & ADOConnection in Service -> Speicherübrelauf

  Alt 16. Jan 2017, 12:48
oder nur?

CoInitialize(nil) und CoUninitialize dürfen nur einmalig aufgerufen werden. Nicht pro Verbindung und nicht pro Client und nicht pro Anfrage, sondern insgesamt nur einmal.

Bei 'ner ISAPI-Dll ist das durch den Aufruf in initialization und finalization sichergestellt. Weiß nicht, ob das bei 'nem Service auch so ist, würd' es aber doch stark vermuten. Schlimmstenfalls mal bei jedem Aufruf der beiden Routinen 'nen Eintrag in 'ne Logdatei machen, um so zu prüfen, wie oft man da vorbeikommt.

Alternative:
Delphi-Quellcode:
begin
  CoInitFlags := COINIT_MULTITHREADED;
  CoInitialize(nil);
  Application.Initialize;
  Application.CreateForm(Application.CreateForm(Twm, wm);
  Application.Run;
  CoUninitialize;
end.
Ich vermute mal, dass CoInitialize da nicht so ganz threadsave ist, da die Aufrufe ja allem Anschein nach weitere Verbindungen irgendwie beeinflussen.

Wenn alle Stricke reißen, dann mal die ganze Verbindung von CoInitialize über Verbindung zur Datenbank und Ausführung der Abfrage, bis CoUninitialize mit 'ner TCriticalSection kapseln. Allerdings scheint mir das dann nicht so wirklich im Sinne des Erfinders zu sein.

Eventuell findest Du hier ja weitere Hinweise: https://www.benefind.de/web.php?org=...+thread+delphi

Hab' mal die Sourcen einer funktionierenden ISAPI-Dll angehängt, eventuell kannst Du damit ja was anfangen.

Geändert von nahpets (21. Nov 2017 um 17:41 Uhr)
  Mit Zitat antworten Zitat