Monday, December 13, 2010

Come migliorare le prestazioni di una query tramite Client Object Model

Continuando con la serie di post iniziati un paio di giorni fà, vorrei riprendere e amplicare cosa spiegato in questo post: http://bitvector.tostring.it/blog/post/come-leggere-da-una-lista-sharepoint-2010/
Alla fine del post potete trovare un paio di righe di codice che generano ed eseguono una query sulla lista MyContactsList, creata e popolata nei post precedenti (qui e qui).
In quei post la lista conteneva al massimo un paio di elementi inseriti a mano da noi mentre, adesso, contiene 100 elementi inseriti tramite il codice presente nel post di popolazione.
FiddlerLogoSe proviamo a eseguire il codice che legge gli item presenti, vedremo che l’esecuzione sarà più lenta ed onerosa di prima.
Per poter apprezzare meglio questo gap vi consiglio di scaricare e avviare Fiddler.




Ecco cosa succede se lancio la query che mi ritorna tutti gli item presenti nella lista:
received_bytes_com_query
Otteniamo 205.039 bytes in ricezione.
Solitamente non si ha la necessità di ottenere tutti i dati dalla sorgente, quindi è il caso di filtrarli anche per ottenere delle prestazioni migliori.
Ecco allora cosa faremo per ottenere solamente il campo Title dei nostri item e il numero di item all’interno della nostra lista:
static void Main(string[] args)
{
    string webUrl = "http://win-040f0ba75i9";
    using (ClientContext ctx = new ClientContext(webUrl))
    {
        List list = ctx.Web.Lists.GetByTitle("MyContactsList");

        ctx.Load(list, l => l.Title, l => l.ItemCount);
        ctx.ExecuteQuery();
        Console.WriteLine(list.Title);
        Console.WriteLine(list.ItemCount);
    }

    Console.ReadLine();
}
Così facendo abbiamo già ridotto drasticamente il numero di bytes in viaggio:
received_bytes_com_query_title
Nel prossimo post vedremo come filtrare gli item in base a un campo Smile
ciao

No comments:

Post a Comment