Posts
103
Comments
238
Trackbacks
4
DataBind performance test updated

Come da alcuni miei post precedenti, questo e questo, mi trovo a dover confermare che i test che ho eseguito evidenziano come ASP.NET 2.0 sia estremamente meno performante della versione 1.1 nel DataBinding.

L'unico aggiornamento rispetto ai post precedenti è che ho realizzato una pagina ad hoc per ASP.NET 2.0 che utilizza la nuova sintassi per il late databinding, ossia sostituendo DataBinder.Eval con il comando Eval. In effetti la nuova sintassi porta qualche miglioramento rispetto a quella vecchia, ma tuttavia il risultato finale non è paragonabile alle prestazioni ottenute con ASP.NET 1.1.

Ecco un esempio di risultati degli ultimi test:

  • DataBinding sotto ASP.NET 1.1

DataBinder: 304
StrongType: 250
Diff: 17,76316%

  • DataBinding sotto ASP.NET 2.0 con sintassi specifica 2.0

DataBinder: 453
StrongType: 351
Diff: 22,51656%

I risultati dei test sono molto variabili, ma le differenze percentuali si attestano sempre attorno al 20% tra cast diretto e late binding, e comunque è sempre evidente il peggioramento con la versione 2.0.

Code-behind della pagina:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.Configuration;

public partial class _Default : System.Web.UI.Page
{
    
private string m_ConnectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
    
private DataSet ds;

    
protected void Page_Load(object sender, EventArgs e)
    {
        
long startTicks;
        
long timeTakenTicks;
        
long[] timeArr = new long[2];
        timeArr[0] = 0;
        timeArr[1] = 0;
        
int cycles = 4;

        BuildDataSet();

        
bool bindToggle = true;

        DataGrid dg;

        
for(int i = 0; i < cycles; i++)
        {
            startTicks = Environment.TickCount;

            
if(bindToggle)
                dg = DataBinderGrid;
            
else
                
dg = StrongTypeGrid;

            
for(int j = 0; j < 10; j++)
                BindDataToGrid(dg, ds);

            timeTakenTicks = Environment.TickCount - startTicks;

            
if(bindToggle)
                timeArr[0] += timeTakenTicks;

            
else timeArr[1] += timeTakenTicks;

            bindToggle = !bindToggle;
        }

        
int time1 = (int)(timeArr[0]) / (cycles / 2);
        Response.Write("DataBinder: " + time1.ToString() + "
");
        
int time2 = (int)(timeArr[1]) / (cycles / 2);
        Response.Write("StrongType: " + time2.ToString() + "
");

        
long maxTime = Math.Max(time1, time2);
        
long minTime = Math.Min(time1, time2);
        
long diffInt = maxTime - minTime;
        
float percentDiff = ((float)diffInt * 100) / maxTime;

        Response.Write("Diff: " + percentDiff.ToString() + "%");
    }

    
private void BuildDataSet()
    {
        
string sqlString = @"SELECT * FROM Orders";
        SqlConnection conn = 
new SqlConnection(m_ConnectionString);

        conn.Open();

        SqlDataAdapter da = 
new SqlDataAdapter(sqlString, conn);

        conn.Close();

        ds = 
new DataSet();

        da.Fill(ds);
    }

    
private void BindDataToGrid(DataGrid grid, DataSet ds)
    {
        grid.DataSource = ds;
        grid.DataBind();
    }
}

Naturalmente non mi spiego questo comportamento, e l'unica cosa che mi viene da pensare è che forse per renderlo più performante bisognerebbe scrivere codice 100% .NET 2.0, ad esempio utilizzando SqlDataSource, ma in ogni caso non è giustificabile.

Come sempre, se qualcuno avesse qualche spiegazione da dare è il benvenuto.

powered by IMHO 1.3

posted on venerdì 10 marzo 2006 11:40 Print
News

Scopri CS2, il mio progetto universitario per l'indicizzazione e la ricerca di codice sorgente personale costruito su Lucene.Net.

Windows Developer Power Tools

Potete trovare il mio progetto BusyBoxDotNet nel libro Windows Developer Power Tools, pubblicato da O'Reilly, per il quale ho scritto l'intero capito dedicato.

Sono stato nominato dVP 2008, un riconoscimento per l'apporto fornito alla comunità del progetto db4o.