January 2005 Blog Posts

ADO.NET 2.0: Improve your performance...

Probabilmente alcuni di voi già ne sono a conoscenza, ma la lettura di questo articolo ha suscitato in me parecchie curiosità che mi hanno portato a replicare il test eseguito dall'autore sulla mia macchina. Così l'altro giorno ho creato ed eseguito due applicazioni console, stesso codice ma su diverse versioni, e devo dire di essere rimasto a bocca aperta: Codice C# DataTable dt = new DataTable();DataColumn id = dt.Columns.Add("ID", System.Type.GetType("System.Int32"));id.Unique = true;dt.Columns.Add("test", System.Type.GetType("System.String"));DateTime dtStart = DateTime.Now;Random rnd = new Random(1);Console.WriteLine("Start at {0}", dtStart.ToString());for(int i=0;i<1000000;i++){    DataRow dr = dt.NewRow();    dr["ID"] = rnd.Next();    dr["test"] = DateTime.Now.ToString();    try    {        dt.Rows.Add(dr);    }    catch(System.Data.ConstraintException ce)    {        dr["ID"] = rnd.Next();        dt.Rows.Add(dr);    }    Console.WriteLine("Row {0} added", i);}Console.WriteLine("End at {0} in {1}", dtStart.ToString(), DateTime.Now.Subtract(dtStart)); .NET Framework 1.1 .NET Framework 2.0 Salta immediatamente all'occhio il tempo di esecuzione: il fw 1.1 impiega 31 minuti mentre il 2.0 quasi 2 minuti!!! Questo perchè è stata completamente riscritta la gestione degli indici del DataTable/DataSet, come ben evidenziato nell'articolo, per renderla maggiormente scalabile. Il...

posted @ Saturday, January 29, 2005 11:56 AM | Feedback (13)

Bug: Pocket PC 2003 e Content-type

Qualche tempo fa, durante lo sviluppo di un'applicazione web disponibile anche per palmari, mi sono imbattuto in un problema apparentemente strano. Premetto che l'applicazione fa uso di una connessione SSL 128 bit. Una particolare sezione prevede il download di files attraverso la classica pagina di "Download Manager" che, con la combinazione del Response.BinaryWrite e degli header Content-Type e Content-disposition*, restituisce il file selezionato.Ma qui si presenta un *grosso* problema: su Pocket PC 2003 (ho potuto testare solo su questa versione) + SSL il content-disposition non funziona ed il file viene salvato con il nome della pagina (che nel mio caso è  download.aspx ). Come...

posted @ Thursday, January 27, 2005 1:36 AM | Feedback (6)

Viste o non viste: questo è il problema...

Beh, in realtà non è un problema ma solo una curiosità: che utilizzo fate delle Viste (o Views) di SQL Server? Conviene utilizzare le viste come delle tabelle appositamente filtrate ed organizzate da sfruttare nelle stored procedure? Dal punto di vista delle performance sicuramente no! Una vista è decisamente più lenta di una normale SELECT, ma permette di avere un codice molto più pulito, ordinato ed aggiunge un ulteriore strato particolarmente utile se la stessa query viene utilizzata da più punti. Lo scopo "ufficiale" di una Vista è, in poche parole, quello di consentire la lettura dei dati (o solo di una parte...

posted @ Wednesday, January 26, 2005 3:12 AM | Feedback (14)

Classic ASP: Upgrade to ASP.NET

A causa del diverso processo di esecuzione, ASP e ASP.NET non possono integrarsi in maniera diretta. Ad esempio non è possibile condividere lo stato della sessione o sfruttare la tecnica degli include per condividere parti di codice. Durante il processo di update è possibile, però, utilizzare la tecnica denominata "URL grabbing" per riutilizzare pagine ASP all'interno delle nuove ASP.NET. Un primo passo è quello di creare un Web User Control che sostituisce l'include, ed inseriamo il seguente codice nell'evento load: HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create("http://localhost/test.asp");HttpWebResponse webRes = (HttpWebResponse)webReq.GetResponse();System.IO.StreamReader stream = new System.IO.StreamReader(webRes.GetResponseStream());Response.Write(stream.ReadToEnd());stream.Close();webRes.Close(); Il codice cattura l'output generato dalla pagina test.asp e lo riporta all'interno dell'output del Web User Control. Ovviamente questo è solo un esempio...

posted @ Sunday, January 23, 2005 5:21 PM | Feedback (16)

ioProgrammo n.88 - Difendiamoci dalla SQL Injection...

Mi accodo al post di Lorenzo: con il numero 88 di ioProgrammo, oltre all'articolo di Lorenzo e del conterraneo Mighell, ci sono anch'io con un articolo sui metodi da adottare per prevenire la SQL Injection con ASP.NET e C#. Ovviamente ogni commento è decisamente gradito!!! ;-)(preferirei quelli positivi, ma se proprio non ce la fate...;-)

posted @ Thursday, January 20, 2005 6:57 PM | Feedback (15)