Frage

Ich brauche mehr STA Threads in meiner ASP.NET-Anwendung einige COM Komponenten zu verwenden.

Ich habe irgendwo gelesen, in jedem Prozess, nur ein STA Thread kann existieren. Ich codiert ein Beispielprojekt und machte viele Threads und setzen ihre Wohnung Zustand STA und sie arbeiten mit COM Objekte ohne Ausnahme.

Ist es möglich, viele STA Threads innerhalb eines Prozesses zu haben?

War es hilfreich?

Lösung

Wenn Ihr Programm mit vielen STA-Threads funktioniert, warum dann fragen Sie, ob es funktioniert? :) .NET ermöglicht es Ihnen, eine beliebige Anzahl von STA-Threads haben, so dass er arbeiten muss. Was Sie lesen vielleicht nur ein Haupt-Thread und eine Nachrichtenschleife, though.

wahr sein für typische native Anwendungen mit

Andere Tipps

Es gibt keine inhärente Begrenzung für die Anzahl von STA-Threads Sie haben können, aber Sie werden wahrscheinlich eine solche Grenze auf eigene Faust verhängen wollen.

Wenn Sie erlauben, die ASP.NET-Anwendung zusätzliche STA-Threads zu erstellen, wie neue Benutzeranforderungen kommen, ohne sie zu begrenzen, was schließlich die Anzahl der Threads der Leistung Ihrer Anwendung verursachen wird als die Zeit, die von der CPU auf Kontextwechsel ausgegeben verschlechtern zu hoch. Dies macht auch die Anwendung viel anfälliger für Denial-of-Service-Attacken.

Sie können prüfen, ein Design sind Sie ein Limit für die Anzahl der STA-Threads festgelegt, basierend auf Ihrer Hardware oder Benutzer-Profil, und sobald die Grenze erreicht ist, implementieren einige Pooling Weiterverwendung bestehende STA Threads, der neuen Anforderungen.

Es gibt keine Obergrenze, mit Ausnahme des Speichers. Ein 32-Bit-Prozess normalerweise etwas Peters 2000 Fäden scheuen, wenn die Stapel der Fäden alle verfügbaren Adressraum verbraucht haben.

Halten Sie die Regeln beachten, können Sie nicht ein Objekt aufrufen, ohne Marshalling in einer STA von einem anderen STA erstellt wurde. Und vergessen Sie nicht die erforderliche Nachrichtenschleife, muss ein STA-Thread pumpt das Marshalling am Leben zu halten und Deadlock zu verhindern. Offensichtlich irgendwo in der Nähe des Speicherlimit bekommen sollte dringend vermieden werden.

Es gibt keine wirkliche Grenze auf Standard-STA-Thread, aber es gibt nur einen ‚besonderen‘ STA-Thread für die Benutzeroberfläche, die die Nachrichtenschleife hat. Dies kann sein, was Sie an anderer Stelle lesen. Während die meisten COMs Feingewinde mit jedem STA werden, können einige COMs die Nachrichtenschleife erfordern (wie beispielsweise für die Timer tickt), die darauf zurück zu dem UI-Thread oder Nachrichten Pumpen erfordert.

Ist STA Nachrichtenschleife Required in diesem Fall?

http://blogs.msdn.com /b/cbrumme/archive/2004/02/02/66219.aspx

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