WCF Aufbau DataContract => performance übertragung!?



  • Hallo Leute,

    ich über trage Bulk Daten von A nach B über einen WCF Service.
    Die einzelnen Datenblöcke sind vom Typ "Dictionary<int,List<Foo>>"!
    Wobei "Foo" eine Klasse ist mit ValueTypen ist.

    Wie sollte man DataContracte aufbauen , damit die Daten effizent serialisiert und übertragen werden!?

    Grüße



  • Es kommt meist auf die Datenmenge an. Je mehr serialisiert werden muss, desto länger dauert es. Dazu kommt das Dictionaries meist sehr unschön serialisiert werden, einfach weil sie nur sehr komplex darzustellen sind.

    Evtl. könntest du statt dem Dictionary<int, List<Foo>> sowas in der Art machen:

    [DataContract]
    public class Foo
    {
       [DataMember]
       public int Val1;
       [DataMember]   
       public double Val2;
    }
    
    // Diese Klasse dann als Ersatz fürs dictionary
    [DataContract]
    public class Bar
    {
       [DataMember]   
       public int Key;
       [DataMember]   
       public IEnumerable<Foo> Val;
    }
    
    // dein bulkset:
    [DataContract]
    public class Bulkset
    {
       [DataMember]
       public IEnumerable<Bar> Bars;
    }
    


  • Oh ok danke, dann werd ich das mal so machen! ABER, wieso is das den so schwiereig eine Dictionary zu serialisieren, diese datenstruktur implementiert ja IEnumerable<KeyValuePair<T1,T2>>, was zur serialisering im aufwand ja nich viel anders is wie diene datenkontrakte oder?



  • Guten Morgen!

    Das Problem ist einfach nur die Komplexität deiner Struktur. Der DataContractSerializer kann deine Struktur durchaus in XML serialisieren, das ist ja das schöne daran.

    Doch der Knackpunkt ist, je komplizierter Foo wird, desto komplexer sieht nachher das XML aus. Daraus folgt, dass der Vorgang zur De-/Serialisierung länger dauert. Und du musst bedenken, es betrifft immer beide Seiten, Server wie Client. Aber nicht nur die Serialisierung wird dadurch ineffizient, sondern auch die Datenmenge unnötig aufgebläht, was sich dann bei der eigentlichen Übertragung wieder bemerkbar macht.

    Das mag bei Highend-Servern und dicker Leitung vielleicht keine Rolle spielen, aber die Perfomance wird in jedem Fall beeinträchtigt.



  • Ok vielen dank;)



  • Wie? Das wird per XML übertragen? Das ist ja schrecklich.



  • Stichwort SOAP!



  • NullBockException schrieb:

    Stichwort SOAP!

    http://de.wikipedia.org/wiki/SOAP
    Der zweite Satz 😉


Anmelden zum Antworten