Ho ereditato un progetto in cui il modello dati dell'applicazione è un documento XML. Gli sviluppatori prima di me avevano creato un modello a oggetti basato sullo schema di questo xml e quindi codificato sul modello a oggetti.La serializzazione XML è lenta
Dopo diversi anni di manutenzione, questa applicazione ha gradualmente iniziato a mostrare la sua età. Il team leader ha affermato che il motivo principale alla base di questo è dovuto alla "lentezza" della serializzazione xml. Sono tentato di chiamare BS su questo, ma molti dei file xml con cui abbiamo a che fare sono di dimensioni superiori a 2 MB, e tenendo a mente le basi di ciò che accade dietro le quinte con gli oggetti contrassegnati [Serializable]
, 2MB è molto da riflettere su quindi potrebbe esserci un po 'di verità nella teoria della lentezza.
Nella tua esperienza, la serializzazione è davvero così 'lenta'/cattiva da optare per un modello XML -> XPath invece di un modello XML -> POCO?
BTW questo è un progetto .NET 2.0, ei nostri clienti potrebbero aggiornarsi a .NET 3.5 un po 'alla fine del prossimo anno.
+1 ottima risposta. Per inciso, ricordo di aver visto alcuni benchmark su DataContractSerializer che mostravano una media di circa il 10% più veloce di XmlSerializer. – womp
-1 Poiché la serializzazione XML * sicuramente utilizza * Reflection; non c'è modo di ottenere dettagli del tipo * a meno che * non abbia usato Reflection. Ora, questi dettagli non devono essere usati * ripetutamente * ma devono essere ottenuti in primo luogo. Inoltre, 'DataContractSerializer' è * non * parte di WCF; WCF lo sfrutta pesantemente, ma si trova all'esterno di WCF (nel proprio spazio dei nomi e nel proprio assembly). – casperOne
@casperOne Il serializzatore XML utilizza la riflessione come si è detto la prima volta assumendo che si stiano chiamando i costruttori corretti in cui verrà memorizzato nella cache l'assembly risultante. Credo che si possa anche generare questo al momento della compilazione – JoshBerke