Ieri ho assistito ad una strana cosa:
indagando sulle prestazioni di una ns applicazione aziendale, ho notato che il tempo di serializzazione/deserializzazione di un DataTable che è ospitato in un WF a stati macchina è molto alto..... attaccandomi con WinDbg ho notato un sacco di eccezioni.... poi sono andato in visual studio e li ho attivato il debug delle eccezioni di tutto il codice (oltre il mio anche quello del DataTable interno) facendo Tools -> Options -> Debugging -> decheck di "Enable Just My Code"
poi ho eseguito questo codice:
var b = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
var m = new MemoryStream();
var dt = new DataTable();
dt.Columns.Add("dt",typeof(DateTime));
dt.Rows.Add(dt.NewRow());
dt.Rows[0]["dt"] = DateTime.MinValue;
b.Serialize(m, dt);
//fin qui tutto ok...
var m2 = new MemoryStream(m.ToArray());
var dt2 = (DataTable)b.Deserialize(m2);
//e qui si incazza..... dandomi un ArgumentOutOfRangeException con message: The added or subtracted value results in an un-representable DateTime. Parameter name: value
In realtà l'errore è catchato all'interno e quindi procede correttamente, ma l'errore in se, il suo cath, la generazione dello stacktrace, per n utenti che eseguono il web in cui accade, si traducono in un certo consumo di CPU...........
Lo fa solo con le date a MinValue.... ovviamente la colonna la dichiaro string, il problema non si pone....... mah!!!!!