Domanda

ho bisogno di più thread STA dentro la mia applicazione ASP.NET di utilizzare alcuni componenti COM.

ho letto da qualche parte dentro ogni processo, solo un thread STA può esistere. Ho codificato un progetto di esempio e ha fatto molti fili e impostare il loro stato appartamento a STA e funzionano con oggetti COM senza alcuna eccezione.

E 'possibile avere tanti fili STA all'interno di un processo?

È stato utile?

Soluzione

Se il programma funziona con molti thread STA, allora perché me lo chiedi se funziona? :) .NET permette di avere un numero qualsiasi di thread STA, quindi deve lavorare. Quello che si legge potrebbe essere vero per le applicazioni tipiche native con un solo thread principale e un ciclo di messaggi, però.

Altri suggerimenti

Non v'è alcun limite intrinseco al numero di thread STA si può avere, ma probabilmente si vuole imporre tale limite da soli.

Se si consente l'applicazione ASP.NET per creare thread STA aggiuntivi come nuove richieste degli utenti arrivano, senza limitarla, alla fine il numero di thread causerà prestazioni dell'applicazione a deteriorarsi come la quantità di tempo trascorso dalla CPU in cambio di contesto diventa troppo elevata. Questo rende anche l'applicazione molto più vulnerabile a attacchi denial of service.

Si può considerare un disegno fosse di impostare un limite per il numero di thread STA, sulla base di hardware o profilo degli utenti, e una volta che viene raggiunto il limite, implementare alcune pool di riutilizzo thread STA ai service nuove richieste esistente.

Non v'è alcun limite superiore, diverso da quello della memoria. Un processo a 32 bit normalmente Peters un po 'timido di 2000 thread quando gli stack dei fili hanno consumato tutto lo spazio di indirizzi disponibili.

mantenere le regole in mente, non si può chiamare un oggetto che è stato creato in una STA da un'altra STA, senza marshalling. E non dimenticate il ciclo di messaggi richiesta, un thread STA deve pompare per tenere vivo marshalling e prevenire stallo. Ovviamente arrivare ovunque vicino al limite di memoria dovrebbe essere fortemente evitata.

Non c'è alcun limite reale sul thread STA standard, ma c'è solo una 'speciale' thread STA per l'interfaccia utente che ha il ciclo di messaggi. Questo può essere quello che avete letto altrove. Mentre la maggior parte COM stanno bene con qualsiasi thread STA, alcune organizzazioni comuni di mercato possono richiedere il ciclo di messaggi (come ad timer ticchettio) che richiederà che punta al thread UI o un messaggio di pompaggio.

È STA Messaggio circuito necessari in questo caso?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top