Sofern Sie bereits mit den Interop Assemblies von Microsoft gearbeitet haben wissen Sie das Office auf einer COM Architektur basiert. Das bedeutet, sie beziehen in ihrer Anwendung COM Proxy Objekte von Office für deren Freigabe sie verantwortlich sind.

Wie sie vermutlich wissen, müssen Sie jedes COM Proxy Objekt durch die Funktion ReleaseComObject auch wieder freigeben. Sie signalisieren dem COM Server damit das Sie das Objekt nicht mehr benötigen. Würden Sie das Objekt nicht freigeben hält der COM Server es weiterhin im Speicher auch wenn Sie die Office Anwendung längst geschlossen haben und Ihr Programm beendet ist. Sie hätten ein Memory Leak erzeugt und ihre erzeugte Instanz wäre immer noch als aktiver Prozess im Windows Task Manager zu sehen.

Aufgrund dieser Verhaltenweise ist es notwendig erzeugte Proxy Objekte explizit zu speichern. Praktischer formuliert: Wenn Sie ein Property eines Objekts abfragen z.B. via application.COMAddins haben Sie einen COM Proxy erzeugt und um diesen nach der Benutzung wieder freigeben zu können müssen sie ihn in jedem Fall lokal zwischenspeichern, andernfalls haben Sie keine Möglichkeit später für den Proxy die Funktion ReleaseComObject aufzurufen. Halten Sie sich nicht an diese Regeln hält der COM Server(Office) ihr erzeugtes Objekt weiterhin im Speicher und wartet (vergebens) das Sie ihm die Freigabe signalisieren. Verwenden Sie im Umgang mit den Interop Assemblies nie COM Proxy Objekte ohne sie vorher lokal zu speichern!

Dadurch ergeben sich natürlich folgende Nachteile:

- Sie müssen jederzeit bedenken alle Objekte stets wieder freigeben zu müssen,
  untypisch in einer managed Umgebung.

- Ihr Code wird durch die expliziten Speicherungen und Freigaben der COM Proxy Objekte
  schnell aufgebläht und unleserlich.

In NetOffice müssen sie nicht jedes Objekt explizit freigeben und es ist Ihnen auch erlaubt Objekte implizit zu benutzen. Alle Objekte werden für Sie verwaltet. Sie können in NetOffice ein Objekt explizit über seine Methode Dispose freigeben und sich jeder Zeit über die Anzahl aller COM Proxies innerhalb ihrer Anwendung informieren.  Eine praxisorienterte Erklärung mit Beispielen in C# oder VB.NET finden Sie dazu hier:

Tutorial01 – COM Proxy Management verstehen.

Last edited May 7, 2012 at 11:31 AM by SebastianDotNet, version 43

Comments

No comments yet.