Hosting von verwaltetem Code und Garbage Collection

Ich habe einen C ++ - Out-of-Process-COM-Server, der eine Menge C # -Code hostet, um die API zu unterstützen, die von den C ++ - COM-Objekten verfügbar gemacht wird.

Aus verschiedenen Gründen erwäge ich, den C ++ - Teil meiner Lösung zu streichen. Aufgrund von Einschränkungen, die außerhalb meiner Kontrolle liegen, habe ichhaben Beibehalten des veralteten COM-Servers. Microsoft hat ein kanonisches Beispiel dafürHier.

Wenn ich mir dieses Beispiel ansehe, gibt es etwas, das ich nicht verstehe. Bevor die Nachrichtenschleife startet, wird alle 5 Sekunden ein Timer zum Aufrufen von GC.Collect erstellt. Die einzige Erwähnung, die ich finden kann, bedeutet, dass sichergestellt werden soll, dass die COM-Objekte in einem angemessenen Zeitraum freigegeben werden. Ich bin ein wenig verwirrt ... ruft mein C ++ - Host derzeit automatisch GC.Collect auf? Ich mache es bestimmt nicht. Und doch erstelle ich verwaltete Objekte (mit COMVisible (true) als COM-Objekte im C ++ - Code. Heißt das, ich sollte jetzt alle 5 Sekunden GC.Collect aufrufen? Wenn nicht, warum muss ich es in diesem neuen C # aufrufen? out of process server. Ist dies der Ausgleich für den automatischen Prozess, der nicht referenzierte COM-Objekte in einer normalen C ++ - Anwendung bereinigt? (Ich gehe davon aus, dass dies irgendwann während der Nachrichtenschleife geschieht.)

Ein Anruf bei GC.Collect alle 5 Sekunden scheint eine schlechte Idee zu sein. Täusche ich mich, mir Sorgen zu machen? Gibt es eine andere Methode, mit der ich die gleichen Ergebnisse erzielen könnte?

Ich benutze .NET 4.5 und Visual Studio 2012.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage