Was ist der richtige Weg, um mit COM-Objekten zu arbeiten?

Dies ist eine sehr häufige Frage, und ich habe beschlossen, sie zu stellen, da diese Frage ab heute möglicherweise eine andere Antwort hat. Hoffentlich helfen die Antworten dabei, zu verstehen, wie mit COM-Objekten richtig umgegangen wird. Persönlich bin ich sehr verwirrt, nachdem ich unterschiedliche Meinungen zu diesem Thema erhalten habe.

Die letzten 5 Jahre habe ich mit COM-Objekten gearbeitet und die Regeln waren für mich sehr klar:

Verwenden Sie einen einzelnen Punkt in Codezeilen. Verwenden Sie mehr als einen Zeitraum, um temporäre Objekte im Hintergrund zu erstellen, die nicht explizit freigegeben werden können.Verwenden Sie nicht foreach, sondern verwenden Sie stattdessen eine for-Schleife und geben Sie jedes Element bei jeder Iteration frei. Rufen Sie nicht FInalReleaseComObject auf, sondern verwenden Sie stattdessen ReleaseComObject. Verwenden Sie GC nicht zum Freigeben von COM-Objekten. Die Absicht von GC ist hauptsächlich das Debuggen.Geben Sie die Objekte in umgekehrter Reihenfolge ihrer Erstellung frei.

Einige von Ihnen sind möglicherweise frustriert, nachdem sie diese letzten Zeilen gelesen haben. Ich wusste, wie man ein Com-Objekt richtig erstellt / freigib

Folgend einige Links, die ich zu diesem Thema gefunden habe. Einige sagen, dass ReleaseComObject aufgerufen werden muss, andere nicht.

So geben Sie Excel-COM-Objekte ordnungsgemäß frei (Nov. 2013)Proper Methode zum Freigeben von COM-Objekten in .NET (August 2011) Marshal.ReleaseComObject als gefährlich eingestuft (März 2010) ReleaseCOMObject (April 2004)

"... In VSTO-Szenarien muss ReleaseCOMObject normalerweise nicht mehr verwendet werden. ..."

MSDN - Marshal.ReleaseComObject Method (aktuelle .NET Framework-Version):

"... Sie sollten diese Methode verwenden, um das zugrunde liegende COM-Objekt freizugeben, das Verweise enthält ..."

AKTUALISIEREN

Diese Frage wurde als zu breit markiert. Wie gewünscht werde ich versuchen zu vereinfachen und einfachere Fragen zu stellen.

Ist ReleaseComObject erforderlich, wenn Sie mit COM-Objekten arbeiten oder GC richtig aufrufen? Ändert der VSTO-Ansatz die Art und Weise, wie wir mit COM-Objekten gearbeitet haben?Welche der oben genannten Regeln, die ich geschrieben habe, sind erforderlich und welche sind falsch? Gibt es noch andere?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage