:master: forse ti darò un dispiacere.
Ho provato a simulare la situazione descritta.
Ho una tabella comuni in Access di 8101 record.
All'inizio leggo la tabella e la salvo nella session.
poi costruisco 810 tabelle di 10 record ciascuna utilizzando un DataView filtrando con RowFilter, utilizzando un StringBuilder
Poi valorizzo un Literal.
Ebbene, ottengo una media di 17,3 secondi con VS2003 e 16.7 con VS2005
il codice di prova è:
codice:
Private dt As DataTable
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Inserire qui il codice utente necessario per inizializzare la pagina
If Not Me.IsPostBack Then
dt = Libreria.GetDataTable(StringaConnessioneTest, "SELECT * FROM COMUNI")
Me.Session.Add("dt", dt)
Else
dt = DirectCast(Session("dt"), DataTable)
End If
End Sub
Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
Dim o As New TempoOperazione
o.Start()
Dim NumeroRecord% = dt.Rows.Count
Dim RecordTabella% = 10
Dim NumeroTabelle% = NumeroRecord \ RecordTabella
Dim NumeroElementiUltimaTabella% = NumeroRecord Mod RecordTabella
Dim sb As New StringBuilder
If NumeroElementiUltimaTabella > 0 Then NumeroTabelle += 1
For i As Integer = 1 To NumeroTabelle
Dim dv As DataView = dt.DefaultView()
Dim inizio% = RecordTabella * i - (RecordTabella - 1)
Dim fine% = inizio + RecordTabella - 1
dv.RowFilter = String.Format("ID >= {0} AND ID <= {1}", inizio, fine)
sb.Append("Tabella n° " & i & "
")
sb.Append("<table border=""1"">")
sb.Append("<tr>")
sb.Append("<td>ID</td><td>COMUNE</td><td>PROVINCIA</td>")
sb.Append("</tr>")
For j As Integer = 0 To dv.Count - 1
sb.Append("<tr>")
sb.Append(String.Format("<td>{0}</td><td>{1}</td><td>{2}</td>", dv(j)(0), dv(j)(3), dv(j)(5)))
sb.Append("</tr>")
Next
sb.Append("</table>")
sb.Append("
")
Next
Me.Literal1.Text = sb.ToString
o.End()
PrintLn(o.Secondi)
End Sub