Tengo un servidor que maneja múltiples conexiones de socket entrantes y crea 2 hilos diferentes que almacenan los datos en formato XML.¿Cuándo usar el hilo de bloqueo en C#?
Estaba usando la declaración lock
para seguridad de hilos casi en todos los controladores de eventos llamados asincrónicamente y en los 2 hilos en diferentes partes del código. Lamentablemente, utilizando este enfoque mi aplicación se ralentiza significativamente.
He intentado no utilizar lock
en absoluto y el servidor es muy rápido en la ejecución, incluso el almacenamiento de archivos parece aumentar; pero el programa se bloquea por razones que no entiendo después de 30 segundos - 1 minuto. de trabajo.
So. Pensé que la mejor manera es usar menos bloqueos o usarlo solo allí donde sea estrictamente necesario. Como tal, tengo 2 preguntas:
es la cerradura necesaria cuando escribo a las variables públicas visitada (listas de C#) o incluso solamente cuando leí de ellos?
¿Es necesario el bloqueo solo en los subprocesos asíncronos creados por el manejador de socket o en otros lugares también?
Alguien podría darme algunas pautas prácticas, sobre cómo operar. No publicaré todo el código esta vez. No tiene sentido publicar alrededor de 2500 líneas de código.
No es lo suficientemente específico, mira aquí para información general: http://www.albahari.com/threading/ – eulerfx
Hay toda gama de posibles programas - de absolutamente equivocado/extraordinariamente rápido a siempre correcto/razonablemente lento. Parece que golpeas ambos extremos en tus experimentos. Enhebrar la seguridad no es un tema trivial, así que recomendaría leer sobre él en lugar de tratar de obtener "pautas prácticas". Es decir. El enlace de eulerfx es un buen punto de partida. –