Domanda

Qual è il modo migliore per avvolgere il codice non-thread-safe nel quadro .net?

Ho una libreria di terze parti che non è thread-safe per il suo uso di variabili statiche. Riscrittura non è un'opzione. Questa libreria viene utilizzato da un servizio web asp.net che riceve un sacco di chiamate simultanee.

Al momento ho capito avvolto in una classe proxy che utilizza i blocchi al fine di garantire la sicurezza dei thread:

private static readonly object oneThreadAtATimePlease = new object();
public ISomething CalculateSomething(int someValue)
{
    lock (oneThreadAtATimePlease)
    {
        return new UnsafeLibrary(someValue).DoSomething();
    }
}

Performance è scarsa in quanto più chiamanti devono aspettare per il blocco, ma i risultati sono corretti.

Mi piacerebbe migliorare le prestazioni eseguendo più istanze di questa libreria, ciascuna nel proprio dominio di applicazione. Si tratta di un approccio ragionevole? Ogni codice di buon campione di raccomandare?

È stato utile?

Soluzione

Si potrebbe anche provare a creare un'applicazione basata messaggio utilizzando una coda.

Poi più thread potrebbero accodare le richieste ed un unico filo potrebbe lavorare su questa coda e informare gli altri thread sui risultati. Uso della classe monitor non è sempre il modo più veloce.

AppDomain sono un'opzione. Tuttavia, si avrà a che fare con IPC.

Altri suggerimenti

Che dire di un Singleton che contiene una sola istanza dell'oggetto lavoratori, oltre a una coda di richieste?

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