SharePoint Boss

Benvenuti nel mio blog
posts - 13, comments - 589, trackbacks - 3

martedì 21 febbraio 2012

User Profile vs User Information List + Performance Test

Analizzando un aspetto interessante, sempre in ambito di sviluppi custom, inerente l'accesso alle informazioni personali degli utenti (DisplayName, Account Name, Picture, ecc.) ho messo a confronto l'uso del servizio User Profile e l'uso dell'oggetto SiteUserInfoList, vediamo il codice:

Utilizzo del servizio User Profile

SPServiceContext context = SPServiceContext.GetContext(site);
            UserProfileManager objUserProfileManager = new UserProfileManager(context);
            UserProfile profile = objUserProfileManager.GetUserProfile(LoginName);

            string Title1 = profile.DisplayName;

Utilizzo dell'oggetto SiteUserInfoList

SPUser userinweb = web.EnsureUser(LoginName);
           

string Query = "<Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>" + userinweb.ID + "</Value></Eq></Where>";
            string ViewFields = "<FieldRef Name='Title' Nullable='TRUE' /><FieldRef Name='Picture' Nullable='TRUE' />";

            SPQuery _query = new SPQuery();
            _query.ViewFields = ViewFields;
            _query.Query = Query;

            SPListItem userItem = web.SiteUserInfoList.GetItems(_query)[0];

            string Title2 = userItem["Title"].ToString();

Come si può notare, nel secondo caso, ho preferito utilizzare una CAML Query e quindi prendere il risulato con l'oggetto GetItems invece di usare il GetItemsById(userinweb.ID) perchè a livello di performance è più vantaggioso (strano ma vero) il primo metodo invece del secondo.

Ho chiamato questi due metodi, con un ciclo, per 100 volte e il risultato è stato: vince 7 a 0 l'oggetto SiteUserInfoList, a titolo di esempio i tempi che ho preso:

In questo link che ho trovato sulla rete si possono vedere tutti i campi che potranno essere interrogati per il SiteUserInfoList:

http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/1c90abd0-54d7-482b-b16c-4c323bfbbd2c/

Il test l'ho eseguito in locale con un Notebook con processore i7, SSD e 8Gb di Ram, ma l'ho provato anche su una farm composta da 30 server (tipo NASA) e il risultato è stato che per la SiteUserInfoList la differenza tra il tempo finale e quello iniziale è pari a 0, mentre per il servizio User Profile rimane in termine di millesimi un leggero attimo di latenza.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2446) | Filed Under [ SharePoint 2010 ]

Powered by:
Powered By Subtext Powered By ASP.NET