/ / Creación de un grupo de subprocesos de trabajo para un código no seguro para subprocesos: .net, concurrencia, seguridad de subprocesos, dominio de aplicaciones, proceso de trabajo

Creación de un grupo de subprocesos de trabajo para un código no seguro para subprocesos: .net, concurrencia, seguridad de subprocesos, dominio de aplicaciones, proceso de trabajo

¿Cuál es la mejor manera de envolver código no seguro para subprocesos en el marco .net?

Tengo una biblioteca de terceros que no está en hiloSeguro debido a su uso de variables estáticas. Reescribirlo no es una opción. Esta biblioteca es utilizada por un servicio web asp.net que recibe muchas llamadas simultáneas.

Actualmente lo tengo envuelto en una clase proxy que usa bloqueos para garantizar la seguridad de los subprocesos:

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

El rendimiento es bajo, ya que varias personas que llaman tienen que esperar el bloqueo, pero los resultados son correctos.

Me gustaría mejorar el rendimiento ejecutando varias instancias de esta biblioteca, cada una en su propio dominio de aplicación. ¿Es este un enfoque razonable? ¿Algún buen código de muestra para recomendar?

Respuestas

2 para la respuesta № 1

También puede intentar crear una aplicación basada en mensajes usando una cola.

Luego, varios subprocesos podrían poner en cola las solicitudes y un solo subproceso podría funcionar en esta cola y notificar a los otros subprocesos sobre los resultados. Usar la clase monitor no siempre es la forma más rápida.

AppDomains es una opción. Sin embargo, tendrás que lidiar con IPC.


0 para la respuesta № 2

El constructor estático te ayudará a:

Se garantiza que los constructores estáticos se ejecutarán solo una vez por dominio de aplicación ...


0 para la respuesta № 3

¿Qué pasa con un Singleton que contiene solo una instancia del objeto de trabajo, más una cola de solicitudes?