Frage

Nach dieser Artikel wenn ich entweder mit „Both“ oder „Free“ Threading-Modell meines COM-Objekt registrieren, die vollständig Thread-sicher sein Objekt muss. Insbesondere alle Zugriffe auf globale Umgebungsvariablen müssen synchronisiert werden, und alle Zugriffe auf Membervariablen auch synchronisiert werden müssen. Das ist eine Menge Arbeit.

Jetzt verstehe ich, dass in der Lage, meine Aufgabe als mit „Free“ Threading-Modell ist von Vorteil und könnte sich lohnen zahlen den Preis machen es vollständig Thread-sicher zu registrieren. Aber warum sollte ich will alles tun, das gleiche und registrieren mein Objekt mit „Both“ Threading-Modell statt? Was wäre der Vorteil? Wie wähle ich zwischen "Both" und "Free"?

War es hilfreich?

Lösung

Sowohl Threadingmodell

Der Hauptgrund für die Komponente als unterstützende Threading-Modell Kennzeichnung „Both“ ist für Leistungsverbesserungen, wenn die Komponente aus einem Single Threaded Apartment (STA) aufgerufen wird.

Wenn Sie Ihre Komponente als MTA markieren und Ihre Komponente wird erstellt aus einem STA dann Komponente wird in einer separaten MTA Wohnung und die OLE Threading-Modell .

Free Threadingmodell

Sie mögen vielleicht ein „Free“ Thread-Modell verwenden, wenn die Komponente andere Komponenten verwendet, die als „Free“ gekennzeichnet sind. Wenn Ihre Komponente als „Both“ markiert wurde, dann könnte es Schalt übermäßige Wohnung sein zwischen der „Both“ Komponente in der STA und die MTA ausgeführt wird. Als allgemeine Regel gilt, versuchen Sie die Komponente so nah an den Anrufer wie möglich (das heißt gleiche Wohnung) zu schaffen, während ordnungsgemäß unter allen Szenarien funktioniert.

Eine andere Situation, die Ihre Komponente als „Free“ ist, wenn es explizit Blöcke Markierung (z Thread.Sleep) rechtfertigen würde. Wenn die Komponente als „Both“ markiert und instanziiert in einem STA dann die Komponente würde die STA Meldungsverteilschleife blockieren.

Weitere Überlegungen und Szenarien

Wenn Sie über die Verwendung der Komponente in IIS planen, dann gibt es andere Dinge zu beachten. Für IIS, „Both“ ist die empfohlene Einstellung. Vor allem mit Wohnung Gewinde Komponenten, performant Zugriff auf COM + Object und der Tatsache, dass „Free“ threaded Komponenten des Systems Sicherheitskontext verwenden Sperrprobleme zu vermeiden (wenn Sie Zugriff auf den Sicherheitskontext des Benutzers erforderlich ist). Siehe ein Threading-Modell für Komponenten in IIS Auswahl für weitere Informationen über IIS Threading Überlegungen.

Andere Dinge zu beachten sind COM + Unterstützung und wie Sie Ihre Komponenten verhalten, wenn sie in COM + ausgeführt werden und ob Schnittstelle Zeiger übergeben und gespeichert werden.

Ein exzellenter Artikel ist COM-Threading und Anwendungsarchitektur in COM + -Anwendungen . Es verfügt über einen COM + Fokus, sondern auch diskutiert COM. Für Ihre Frage zu lesen, den Abschnitt mit dem Titel „Threadingmodell Empfehlungen“. Microsoft hat den Original-Artikel entfernt, damit ich auf eine Kopie bin zu verbinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top