Question

J'essaie de comprendre le processus de nettoyage de l'objet.

using (SPSite siteCollection = new SPSite(siteUrl))
{
  SPWeb site = siteCollection.RootWeb;
  foreach (SPList list in site.Lists)
  {
     if (!list.Hidden)
     {
       Console.WriteLine(list.Title);
     }
  }
}

Doit-je envelopper une seconde utilisation contre l'objet SPWEB dans le code ci-dessus?

J'ai lu quelque part que cela n'est pas nécessaire car l'enveloppement d'une utilisation autour du spsite nettoiera n'importe quel web enfant.

Était-ce utile?

La solution

Les objets SPSITE et SPWEB implémentent l'interface Idisposable. Lorsque l'objet SPSITE est finalement disposé, il bougera dans la liste et assurez-vous que tous les objets SPWeb associés à cet objet SPSITE sont également disposés.

Cela pourrait entraîner une hypothèse qui vient d'éliminer tous les objets SPSITE plutôt que de disposer que chaque objet SPWeb serait suffisant pour minimiser l'utilisation de la mémoire. En théorie, c'est correct. Mais cela reportera le dispositif d'élimination de l'objet SPWEB au moment de la disposition de l'objet SPSITE. Donc, le dispositif ne se produit pas juste après que l'objet SPWeb n'est plus utilisé, mais beaucoup plus tard.

Par conséquent, les objets SPSITE et SPWEB doivent être disposés dans la même méthode qu'ils sont attribuées. C'est la meilleure méthode pour que aucun dispositif ne puisse être manqué et de s'assurer qu'un dispositif ne se produise pas pour un objet qui sera utilisé plus tard.

Référence: http:// blogs .TECHNET.COM / B / STEFAN_GOSSNER / ARCHIVE / 2008/12/05 / DISTENIR-SPWEB-and-SPSITE-Objects.aspx

En ce qui concerne votre code: vous pouvez utiliser à l'aide de la déclaration ou enfin bloquer pour lancer l'objet SPWeb.

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