Pregunta

Estoy diseñando un servicio WCF que devuelve una lista de objetos que se describen a una persona en el sistema.

El número de registros es muy grande, y ahí me tienen algunas propiedades como el sexo de la persona.Es mejor crear una nueva enum (Es un complejo de tipo y consume más ancho de banda) nombre Sexo con dos valores (Masculino y Femenino) o el uso de un tipo primitivo de este como bool IsMale?

¿Fue útil?

Solución

Muy poco cambio del punto a bool;que es más grande:

<gender>male</gender> (or an attribute gender="male")

o

<isMale>true</isMale> (or an attribute isMale="true")

No se mucho de eso ;-p

El número de registros es muy grande...

Si el ancho de banda se convierte en un problema, y control de ambos extremos del servicio, a continuación, en lugar de cambiar de entidades podría ver algunas de las otras opciones:

  • pre-comprimir los datos como (por ejemplo), gzip, y de paso (en lugar) de un byte[] o Stream, señalando a habilitar una masa máxima de despegue en el servicio
  • (o) el interruptor de serializador;proobuf-net WCF ganchos, y pueden alcanzar un ancho de banda significativo mejoras con respecto a la predeterminada DataContractSerialier (de nuevo:habilitar MTOM).En un ensayo basado en la Base de datos (aquí) se redujo el 736,574 bytes a 133,010. y reducción de la CPU se requiere para proceso (win:win).Para información, reduce las enumeraciones en números enteros, generalmente requiere sólo 1 byte para el valor de enumeración y de 1 byte para identificar el campo;contrario a <gender>Male</gender>, que en virtud de UTF8 es de 21 bytes (más para la mayoría de las otras codificaciones), o gender="male" a las 14 bytes.

Sin embargo, el cambio va a romper su servicio si usted tiene personas externas que están esperando regular de JABÓN...

Otros consejos

La razón de no utilizar una enum es que el esquema XML no tiene un concepto equivalente a un enum. Es decir, que no tiene un concepto de valores con nombre. El resultado es que las enumeraciones no siempre se traducen entre plataformas.

Utilice un bool, o un campo de un solo carácter en su lugar.

le sugeriría modelo al que de cualquier manera parece más natural hasta que se ejecuta en un tema específico o encuentra un requisito para un cambio.

WCF está diseñado para abstraer los detalles subyacentes, y si el ancho de banda es una preocupación, entonces creo que un bool, int o enumeración serán todos probablemente ser de 4 bytes. Se podría optimizar mediante el uso de una máscara de bits o el uso de un solo byte.

Una vez más, la facilidad de uso de la API y facilidad de mantenimiento es probablemente más importante, que prefiere?

if( user[i].Sex == Sexes.Male )

if( user[i].IsMale == true; ) // Could also expose .IsFemale

if( user[i].Sex == 'M' )

etc. Por supuesto que podría exponer múltiple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top