AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) ,net Framework entladen nach Beendigung COM
Thema durchsuchen
Ansicht
Themen-Optionen

,net Framework entladen nach Beendigung COM

Ein Thema von win568 · begonnen am 26. Jun 2017 · letzter Beitrag vom 26. Jun 2017
Antwort Antwort
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#1

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 12:29
Hmm..

Etwas durch die Brust ins Auge:

Packe die TLBs und verwendeten Funktionen in ein separate DLL.
Dann sollte das .Net doch auch entladen werden, wenn die DLL entladen wird..
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#2

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 12:34
Hallo Holger

Leider verwenden wir auch GUI Controls. Hier wird es dann interessant
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13:01
Packe die TLBs und verwendeten Funktionen in ein separate DLL.
Dann sollte das .Net doch auch entladen werden, wenn die DLL entladen wird..
Ich würde darauf Wetten das diese nichts bring da das Laden des .NET-Subsystem nicht an die DLL gebunden ist sondern an den Prozess/Exe.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#4

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13:09
Hi

Eine Überlegung wäre eine eigene Exe, die wir hijacken und als MDI Fenster in der Applikation anzeigen. Wollte den Aufwand aber vermeiden.

Wir haben auch noch ein Verhalten in den TOleServer festgestellt, das die Situation verschärft. Die TLB verwendet für manche Klassen OLEServer Ableitungen. Diese benötigen wir, um Events einzuhängen. Wenn ich nun die Klassen freigebe, wird der Refcount der eingebetteten FEventDispatch Instanz nicht mehr 0 und es bleiben Speicherlecks übrig.

Das ganze passiert, da im Queryinterface einmal das Interface mit IsEqualIID mit der IID des Interfaces eingehängt wird (ist ja auch korrekt), aber dann die Methode nochmal aufgerufen wird, bei der zwar in der GUID der gleiche D1 Wert, aber D2-D3 = 0 sind. Dadurch wird ein zusätzliches Interface eingehängt (RefCount = 2) aber beim Beenden wird nur einmal das Release aufgerufen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13:22
Wir haben auch noch ein Verhalten in den TOleServer festgestellt, das die Situation verschärft. Die TLB verwendet für manche Klassen OLEServer Ableitungen. Diese benötigen wir, um Events einzuhängen. Wenn ich nun die Klassen freigebe, wird der Refcount der eingebetteten FEventDispatch Instanz nicht mehr 0 und es bleiben Speicherlecks übrig.

Das ganze passiert, da im Queryinterface einmal das Interface mit IsEqualIID mit der IID des Interfaces eingehängt wird (ist ja auch korrekt), aber dann die Methode nochmal aufgerufen wird, bei der zwar in der GUID der gleiche D1 Wert, aber D2-D3 = 0 sind. Dadurch wird ein zusätzliches Interface eingehängt (RefCount = 2) aber beim Beenden wird nur einmal das Release aufgerufen.
In "älteren" Delphi-Versionen (vor Delphi 10) gabs noch einen Bitterbösen Fehler in der Standardimplementierung der überall beim "DefaultInterface" aufgeschlagen ist und die Referenzzählung kaputt gemacht hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.413 Beiträge
 
Delphi 12 Athens
 
#6

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13:45
Packe die TLBs und verwendeten Funktionen in ein separate DLL.
Dann sollte das .Net doch auch entladen werden, wenn die DLL entladen wird..
Ich würde darauf Wetten das diese nichts bring da das Laden des .NET-Subsystem nicht an die DLL gebunden ist sondern an den Prozess/Exe.
Korrekt.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#7

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 14:16
Hi

Wir verwenden derzeit D10 Seattle. Zu alt ??
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#8

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 20:04
Das .Net-SUbsystem lässt sich nicht mehr entladen. Was wohl möglich ist, ist das laden von .Net Libraries in eine neu erstellte Appdomain und das anschließende entladen der Appdomain (.Net Subsystem bleibt weiterhin im Prozess, aber nicht die neu geladenen Bibliotheken). Wüsste aber nicht wie man das für COM-Interfaces hinbekommt :/
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz