Question

Quelle est la meilleure pratique à l'instruction via lorsque vous travaillez avec des objets SharePoint. Quand et comment l'instruction Using devriez-vous utiliser, les objets sont disposés de manière utilisé, etc?

Était-ce utile?

La solution

La clé est de savoir si votre code crée une instance d'un SPSite ou SPWeb vous devez disposer. Toutefois, si vous utilisez une instance de SPContext.Current vous ne devriez pas en disposer. dire Eliminer ce que vous créez, que ce soit directement ou indirectement.

Exemple de créer votre propre instance, donc l'utilisation est nécessaire:

using(SPSite site = new SPSite("http://server"))
{
}

Exemple d'utilisation d'un objet existant de la SPContext, donc l'utilisation n'est pas nécessaire:

SPWeb web = SPContext.Current.Web;
SPSite site = SPContext.Current.Site;

Exemple de créer votre propre instance d'un SPWeb en appelant OpenWeb ():

using(SPWeb web = SPContext.Current.Site.OpenWeb("http://server/mywebsite"))
{
}

En outre, veillez à disposer d'objets même si une exception est levée, en mettant l'appel Éliminez dans le bloc finally.

try
{
   site = new SPSite("http://server");
   web = site.OpenWeb();
}
catch(Exception e)
{
   //handle it
}
finally
{
   if (web != null)
      web.Dispose();

   if (site != null)
      site.Dispose();
}

Ce ne sont que quelques exemples, mais il y a beaucoup d'autres. Voici un bonne référence .

En outre, vous pouvez utiliser l'outil de SPDisposeCheck.

Autres conseils

La règle d'or semble être: Si vous possédez l'objet (par exemple créé en utilisant l'opérateur new), vous disposez de celui-ci. Si l'objet provient d'un autre objet créé par le modèle d'objet SharePoint lui-même, alors vous ne le faites pas. Utilisez SPDisposeCheck pour être sûr que Laurie a indiqué.

Alors que la réponse ci-dessus sont tous très bien, je veux juste ajouter des choses pour plus de clarté.

Pour voir si l'objet que vous utilisez doit être éliminé, vous pouvez vérifier la référence MSDN de la classe (appuyez sur F1 lorsque le curseur est sur la déclaration VS) et vérifier si les outils de classe IDisposable. Dans ce cas, disposer uniquement de l'objet si vous avez réellement fait l'objet (soit avec une nouvelle déclaration, ou une méthode OpenXXX () ou similaire).

La construction try-catch-finally est jamais nécessaire pour ces objets si vous utilisez l'instruction à l'aide, parce que dans la compilation en utilisant la déclaration sera converti en un try-catch-finally constuction comme on le voit dans l'exemple final de Laurie. L'instruction à l'aide est préférable car il est beaucoup plus élégant et rendra votre code plus lisible.

Le SPDisposeCheck semble comme un outil agréable, mais avec un peu de bon sens vous aurez probablement pas besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top