Poco fa leggevo un post in un newsgroup sulle differenze tra i webcontrol DataList e Repeater. Naturalmente la vittoria è andata al Repeater, e visto che ero in vena ho fatto dei test di confronto per le prestazioni da questi webcontrol aggiungendo anche il DataGrid.
Per fare i test ho scritto delle semplici pagine in asp.net che effettuano una query ad un database che ritorna 100 record con 14 campi, e questi vengono visualizzati nella pagina web esattamente in 5 modi:
- DataGrid con la generazione automatica delle colonne.
- DataGrid con l'inserimento manuale delle colonne da codice.
- DataList
- Repeater
- Custom (merita una trattazione a sé).
Il codice per il popolamento di questi webcontrol (tranne l'ultimo) è il seguente:
Sub Page_Load Dim str_conn As String = "..." Dim conn As New OleDbConnection(str_conn) Dim command As New OleDbCommand("select * from tabella", conn) conn.Open() <em>webcontrol</em>.DataSource = command.ExecuteReader(CommandBehavior.CloseConnection) <em>webcontrol</em>.DataBind() End Sub
Ok, vediamo i risultati:
- DataGrid1: 0,0892 s
- DataGrid2: 0,0671 s
- DataList: 0,0071 s
- Repeater: 0,0060 s
C'è bisogno di fare commenti? Il Datagrid viene stracciato dal Datalist e dal Repeater e confina l'uso di questo webcontrol a casi particolari o ad webapplication per intranet. La differenza di un centesimo di secondo tra il DataList e il Repeater è quasi insignificante e promuove a quasi pieni voti il datalist viste le comodità che permette come le modalità di selezione e di incolonnamento davvero molto comode. Il Repeater? Una garanzia! :D
Ho tralasciato il quinto metodo, il custom. L'ho chiamato così perché non viene utilizzato nessun webcontrol, ma viene creata la tabella in HTML in un buffer interno (ho utilizzato lo StringBuilder per le prestazioni) leggendo i dati uno a uno dal datareader. Ecco il codice:
Sub Page_Load() Dim str_conn As String = "..." Dim conn As New OleDbConnection(str_conn) Dim command As New OleDbCommand("select top 100 * from tutte", conn) conn.Open() Dim dr As OleDbDataReader = command.ExecuteReader() Dim risultato As New StringBuilder risultato.Append("<table border='1px' width='100%'>") While (dr.Read()) risultato.Append("<tr>") risultato.Append("<td>") risultato.Append(dr(0).ToString()) risultato.Append("</td>") ...
risultato.Append("<td>") risultato.Append(dr(13).ToString()) risultato.Append("</td>") risultato.Append("</tr>") End While risultato.Append("</table>") Label1.Text = risultato.ToString() dr.Close() conn.Close() End Sub
Le prestazioni? 0,0023 s. Tre volte più veloce del Repeater e una trentina di volte più veloce del DataGrid. Stupisce questo dato? Neanche minimamente. I Webcontrol come il DataGrid, DataList e Repeater sono stati creati per visualizzare i dati provienente da qualsiasi fonte e con la massima personalizzazione possibile per il programmatore che li utilizza, quindi con codice ben lontano dall'ottimizzazione esposta nel codice scritto qui sopra che ha, di conseguenza, lo svantaggio di essere personalizzabile solo mettendo mano al codice.
Ah, naturalmente i test comparativi non devono aver valore assoluto... Certe volte è bello cominciare il pomeriggio con il Jazz che ti accarezza le orecchie...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- C# e Net 6 in Kubernetes con Prometheus e Grafana, il 12 gennaio 2022 alle 21:58
- Snaturare Kubernetes evitando i custom container Docker, il 6 gennaio 2022 alle 19:40
- Provando Kaniko in Kubernetes come alternativa a Docker per la creazione di immagini, il 18 dicembre 2021 alle 20:11
- Divertissement con l'OpenID e Access Token, il 6 dicembre 2021 alle 20:05
- Operator per Kubernetes in C# e Net Core 6., il 28 novembre 2021 alle 19:44
- RBAC in Kubernetes verso gli operator, il 21 novembre 2021 alle 20:52