gennaio 2005 Blog Posts
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...
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...
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...
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...
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...;-)