2011-03-12 7 views
8

Estoy desarrollando una aplicación de estilo de maestro-esclavo. La aplicación maestra enviará datos de estado a los esclavos para procesarlos y mostrarlos a una velocidad constante. Los datos de estado se envuelven en una sola clase que contiene muchos campos. Estos tipos de campo consisten en primitivas, clases, interfaces, listas de interfaces, etc. Todos los tipos son BCL o tipos personalizados, por lo que los tipos personalizados se pueden modificar si es necesario. Tanto la aplicación maestra como la esclava serán .NET 4.0. No me preocupan las versiones de serialización ya que las aplicaciones maestra y esclava se entregarán como un par.¿Debo seguir utilizando BinaryFormatter para la serialización simple en .NET 4.0?

Necesito una manera "rápida" para serializar los datos de estado en el maestro y deserializar en los esclavos. Cuando digo "rápido", estoy hablando más sobre el tiempo de desarrollo (pero el tiempo de procesamiento podría ser un factor si la solución fuera terrible). Sin embargo, el maestro y los esclavos se distribuirán a través de una WAN, por lo que también sería bueno algún nivel de compacidad.

Para una solución rápida, actualmente estoy pensando simplemente en usar BinaryFormatter y luego comprimir la secuencia con GZipStream. ¿Es este el camino a seguir para .NET 4.0?

+2

BinaryFormatter está bien, no hay necesidad de arrastrar alrededor de una tercera parte solución para sus necesidades y sus muertos-simple de usar. No use GZipStream, solo agrega sobrecarga. El ancho de banda de la memoria es demasiado alto para permitirle pagar. –

+0

@Hans: Está hablando de enviar los datos a través de una WAN (que probablemente significa que el ancho de banda menor que 10 Mbps). Creo que 'GZipStream' es casi obligatorio para esta aplicación. – Gabe

+0

@Gabe: se perdió eso, estuvo de acuerdo. –

Respuesta

5

Si la velocidad de desarrollo es la clave (especialmente debido a que tiene interfaces, etc., que necesita configurar apropiadamente para algunos serializadores) entonces tal vez. Sólo recuerde para marcar eventos como:

[field:NonSerialized] 

En cada otra medida (rendimiento de la CPU, ancho de banda, de robustez como la versión, la interoperabilidad, el costo de mantenimiento, etc.) Me gustaría elegir otros formatos :)

he aquí una selección de perfil:

Performance Tests of Serializations used by WCF Bindings

Tal vez no sea una sorpresa (ya lo he escrito), pero tienden a tener un protobuf-net ...

+0

Gran punto para marcar eventos con '[NonSerialized]'. No pensé en eso. – dewald

+0

Las pruebas de perforación de protobuf-net son muy impresionantes. ¿Funcionará tu biblioteca para mi caso? Tengo que serializar interfaces y listas de interfaces. Algunas de estas interfaces representan objetos inmutables; es decir, solo tienen propiedades captadoras, y las clases de implementación tienen instaladores privados. – dewald

+0

@dewald hasta hace aproximadamente una semana hubiera tenido problemas con eso; el fin de semana pasado agregué una característica que permitiría eso, almacenando los detalles del tipo * subyacente * - una respuesta fea a una solicitud muy común. Ver mi blog para más. –

Cuestiones relacionadas