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
Seite 1 von 2  1 2      
win568

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

,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 09:19
Hi

Wir verwenden in Delphi eine TLB, die per COM .NET Funktionen in Delphi einbindet. Da wir diese Funktionen nicht immer brauchen, wollen wir nach Beendigung (Freigabe aller COM Funktionen) das geladene .Net Framework auch beenden, da dieses unnötig viel Speicher benötigt. Wie kann man das machen ?? Wir haben hier nichts gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

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

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 11:38
Du hast leider keine Möglichkeit. Der entscheidende Satz steht auf der MS Seite:
Zitat:
Important

This method does not release resources to the host, unload application domains, or destroy threads. You must terminate the process to release these resources.
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13:14
Wenn du wirklich Probleme mit dem Speicher hast gibts 2 Möglichkeiten:

a, Erstellte deine Exe als 64-Bit Version

b, Lagere die .NET-Anbindung in eine eigene Exe aus.
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:21
Hi

Danke für die Antworten. Die Vorschläge sind leider nicht so einfach umsetzbar. Wir arbeiten an der 64Bit Version, diese ist aber derzeit noch nicht spruchreif. Und eine eigene Exe ist nicht das was unsere Kunden wünschen. Trotzdem danke.

lg
  Mit Zitat antworten Zitat
HolgerX

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

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13: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
 
#6

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 13: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.196 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 14: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
 
#8

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 14: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.196 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 14: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.412 Beiträge
 
Delphi 12 Athens
 
#10

AW: ,net Framework entladen nach Beendigung COM

  Alt 26. Jun 2017, 14: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
Antwort Antwort
Seite 1 von 2  1 2      


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