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.

Month List