Récupération de données de groupe sur le même objet
Dernière modification : vendredi 27 mai 2011
S’applique à : SharePoint Foundation 2010
Disponible dans SharePoint Online
Pour améliorer les performances, essayez toujours de regrouper les demandes de récupération des données portant sur le même objet.
Dans l'exemple suivant, Method1 et Method2 récupèrent toutes les deux le titre et la description d'un site Web et la description de la liste Annonces, mais les performances de Method1 surclassent celles de Method2.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveData
{
// The following example increases performance by grouping the Title and Description
// property calls together in the same Load method call.
static void Method1()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
List oList = oWebsite.Lists.GetByTitle("Announcements");
clientContext.Load(oWebsite,
website => website.Title,
website => website.Description);
clientContext.Load(oList,
list => list.Description);
clientContext.ExecuteQuery();
}
// The following example decreases performance because the Title and Description
// property calls are not grouped together in the same Load method call.
static void Method2()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
List oList = oWebsite.Lists.GetByTitle("Announcements");
clientContext.Load(oWebsite,
website => website.Title);
clientContext.Load(oList,
list => list.Description);
clientContext.Load(oWebsite,
website => website.Description);
clientContext.ExecuteQuery();
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveData
// The following example increases performance by grouping the Title and Description
// property calls together in the same Load method call.
Shared Sub Method1()
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim oList As List = oWebsite.Lists.GetByTitle("Announcements")
clientContext.Load(oWebsite, Function(website) website.Title, _
Function(website) website.Description)
clientContext.Load(oList, Function(list) list.Description)
clientContext.ExecuteQuery()
End Sub 'Method1
' The following example decreases performance because the Title and Description
' property calls are not grouped together in the same Load method call.
Shared Sub Method2()
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
Dim oList As List = oWebsite.Lists.GetByTitle("Announcements")
clientContext.Load(oWebsite, Function(website) website.Title)
clientContext.Load(oList, Function(list) list.Description)
clientContext.Load(oWebsite, Function(website) website.Description)
clientContext.ExecuteQuery()
End Sub
End Class
End Namespace
// The following example increases performance by grouping the Title and Description
// property calls together in the same Load method call.
function Method1 () {
var clientContext = new SP.ClientContext('/sites/TestWebs/TestWeb1');
this.oWebsite = clientContext.get_web();
this.oList = oWebsite.get_lists().getByTitle('Announcements');
clientContext.load(oWebsite, 'Title', 'Description');
clientContext.load(oList, 'Description');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
// The following example decreases performance because the Title and Description
// property calls are not grouped together in the same Load method call.
function Method2 () {
var clientContext = new SP.ClientContext('/sites/TestWebs/TestWeb1');
this.oWebsite = clientContext.get_web();
this.oList = oWebsite.get_lists().getByTitle('Announcements');
clientContext.load(oWebsite, 'Title');
clientContext.load(oList, 'Description');
clientContext.load(oWebsite, 'Description');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
Dans Method1, le code permettant de récupérer le titre et la description du site Web est regroupé, alors que dans Method2, le code servant à la récupération des mêmes propriétés est séparé par une autre action. Method2 déclenche deux requêtes distinctes sur le même objet de site Web et, de ce fait, il existe deux jeux de résultats pour le même objet. Dans la mesure où la bibliothèque cliente vise à retourner des données cohérentes, le second jeu de résultats inclut à la fois le titre et la description du site Web, alors que le premier jeu de résultats inclut également le titre du site Web.
La différence entre les précédentes méthodes est illustrée par la différence entre les méthodes SQL suivantes.
Method1:
SELECT Title, Description FROM Webs WHERE ...
SELECT Description FROM Lists WHERE ...
Method2:
SELECT Title FROM Webs WHERE ...
SELECT Description FROM Lists WHERE ...
SELECT Title, Description FROM Webs WHERE ...
Voir aussi
Concepts
Vue d'ensemble de la récupération des données
Appeler Load et ExecuteQuery avant d’accéder aux propriétés de valeur
Les objets valeur ne sont pas utilisables entre méthodes dans une requête
Les objets clients peuvent être utilisés à travers les méthodes dans une requête
La récupération d'un objet client ne récupère pas toutes les propriétés