Frage

Ich bin ein WCF-Dienst entwerfen, die eine Liste von Objekten angezeigt werden können, die eine Person im System beschreiben.

Die Anzahl der Datensätze ist wirklich groß und es Ich habe einige Eigenschaften wie das Geschlecht. Ist es besser, eine neue Enumeration (es ist ein Komplex-Typ und verbraucht mehr Bandbreite) namens Sex mit zwei Werten (männlich und weiblich) oder verwenden Sie eine primitive Art für diesen wie Bool IsMale?

zu erstellen
War es hilfreich?

Lösung

Sehr wenig Punkt Umschaltung auf Bool; Das ist größer:

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

oder

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

Nicht viel drin ;-p

  

Die Anzahl der Datensätze ist wirklich groß ...

Wenn Bandbreite ein Problem wird, und steuern Sie die beiden Enden des Service , dann eher als Änderung Ihre Entitäten Sie auf einige andere Optionen aussehen:

  • pre-Kompresse, die Daten als (zum Beispiel) gzip, und übergeben (statt) eine byte[] oder Stream, unter Hinweis darauf MTOM auf den Dienst aktivieren
  • (oder) Schalter Serializer; proobuf-net hat WCF Haken und kann erhebliche Bandbreite Verbesserungen gegenüber dem Standard-DataContractSerialier erreichen (wieder: enable MTOM). In einem Test auf Basis von Daten (hier) es reduziert 736.574 Bytes auf 133.010. und reduziert die CPU verarbeiten erforderlich (win: win). Für Informationen, es reduziert Aufzählungen auf ganze Zahlen, in der Regel nur 1 Byte für den ENUM-Wert erfordern und 1 Byte, das Feld zu identifizieren; Gegensatz zu <gender>Male</gender>, die unter UTF8 21 Byte ist (mehr für die meisten anderen Codierungen) oder gender="male" bei 14 Bytes.

Allerdings entweder Änderung wird Ihren Dienst brechen, wenn Sie externe Anrufer haben, die regelmäßig SOAP erwarten ...

Andere Tipps

Der Grund keine enum zu verwenden ist, dass XML-Schema nicht ein Konzept entspricht eine enum hat. Das heißt, dass es kein Konzept benannter Werte haben. Das Ergebnis ist, dass Aufzählungen nicht immer zwischen den Plattformen übersetzen.

Verwenden Sie ein Bool, oder ein einzelnes Zeichen langen Feld statt.

Ich würde Sie es vorschlagen Modell in welcher Weise auch immer natürlichsten scheint, bis Sie in einem bestimmten Thema ausführen oder eine Anforderung für eine Änderung begegnen.

ist WCF zu abstrakt entworfen, um die zugrunde liegenden Details, und wenn die Bandbreite ein Anliegen ist, dann denke ich, ein bool, int oder Enum wird wahrscheinlich alle 4 Bytes sein. Sie könnten optimieren, indem eine Bitmaske oder mit einem einzigen Byte verwendet wird.

Auch die einfache Bedienung der API und Wartbarkeit ist wahrscheinlich wichtiger, was bevorzugen Sie?

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

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

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

usw. Natürlich könnte man mehr aussetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top