Wie viele ‚STA‘ Threads können innerhalb eines Prozesses koexistieren?
-
13-10-2019 - |
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?
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 mitAndere 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