2011-05-19 16 views
8

He estado leyendo muchas de las otras preguntas, así como muchas de las búsquedas de Google y no he podido encontrar una solución clara.C# Thread Safe Deep Copy

De acuerdo con algunas de las mejores prácticas que he leído, los métodos estáticos de una clase deberían crearse seguros para los subprocesos y los miembros de la instancia deberían dejar la seguridad de los hilos a los consumidores.

Me gustaría implementar un método de copia profunda para la clase. La clase en sí tiene otros miembros de tipo de referencia. ¿Hay alguna forma de hacer que el método de copia profunda sea seguro sin tener que imponer la sobrecarga en todos los miembros de la clase de instancia?

Respuesta

0

En cuanto a la clonación, el desbordamiento de la pila ya tiene una buena respuesta.

Deep cloning objects

como para la seguridad hilo, me podría imaginar la única garantía es si se pone cerraduras alrededor de sus variables miembro durante su copia.

Actualización:

Ok, he hecho un poco de investigación. Creo que la forma más elegante de garantizar la seguridad del subproceso de sus miembros es que los subprocesos de llamada mantengan bloqueos en el objeto en lugar de tratar de implementarlo dentro de su clase. Además, implemente la interfaz ICloneable y luego puede hacer una copia binaria de todo el objeto fácilmente. Vea la respuesta en el enlace que publiqué arriba. Por supuesto, aún podría implementar bloqueos para sus miembros estáticos dentro de su clase fácilmente.

+0

Y tengo que suponer que la penalización de rendimiento de poner cerraduras en todas partes sería significativa. – Tim

+0

Bueno, quiero decir, puedes colocar los bloqueos alrededor de los objetos solo dentro de tu método de clonación. Entonces, el único costo sería durante la copia. –

+0

¿Pero no necesitarías también bloqueos en todos tus getters/setters? – Tim