Antonio Esposito's


Prodotti tipici .NETtiani

DataTable + DateTime = lentezza

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!!!!!

Categoria: Tips
venerdì, 08 gen 2010 Ore. 09.06
Statistiche
  • Views Home Page: 11.037
  • Views Posts: 59.414
  • Views Gallerie: 0
  • n° Posts: 44
  • n° Commenti: 16
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003