Question

Est-il nécessaire de disposer du site et des objets Web dans le code suivant? Si oui, comment puis-je faire?

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim site As New SPSite(SPContext.Current.Web.Url)
    Dim web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)

 ........        

 End Sub
Était-ce utile?

La solution

James et Toni sont tout à fait correct, mais ont manqué à mon humble avis l'évidente -. Votre code a un défaut plus profond et si vous avez résolu ce alors disposer les objets n'est pas nécessaire

Vous devriez (si possible) utiliser le SPWeb et SPSite objets de SPContext -. Ils sont déjà créés pour vous par la partie Web SharePoint infrastructure et son plus efficace d'utiliser ces que de créer votre propre

Dans votre code que vous utilisez en fait déjà l'un d'entre eux pour obtenir l'URL actuelle des toiles, mais puis en créant votre propre site web et quel que soit -. Assez inefficace et pas nécessaire

au lieu de

Dim site As New SPSite(SPContext.Current.Web.Url)
Dim web As SPWeb = site.OpenWeb()

Vous devez utiliser simplement

Dim web As SPWeb = SPContext.Current.Web

Si vous utilisez SPSite / SPWeb de SPContext ceux-ci plutôt que de créer votre propre alors vous ne devriez pas disposer d'eux (vous ne les avez pas créé, afin de les laisser seuls)

MSDN - Meilleures pratiques: Utilisation Disposable Windows SharePoint Services Objets

Les objets SPContext sont gérés par le cadre de SharePoint et ne doit pas être mis au rebut de façon explicite dans votre code. Cela est vrai aussi pour les objets SPSite et SPWeb retourné par SPContext.Site, SPContext.Current.Site, SPContext.Web et SPContext.Current.Web.

Autres conseils

Oui, vous devez disposer SPWebs créées par SPSite.OpenWeb ().

Pour en disposer, web.Dispose simple appel () lorsque vous avez terminé dans la méthode.

Vous pouvez également utiliser l'instruction avec le même effet, sans avoir besoin d'appeler directement Dispose ()

Using site As New SPSite(SPContext.Current.Web.Url)
  Using web As SPWeb = site.OpenWeb()
    web.AllowUnsafeUpdates = True
    Dim lPmr As SPList = web.Lists("NombreList")
    Dim oQuery As New SPQuery()
    Dim itemCollectionPMR As SPListItemCollection

    oQuery = New SPQuery()
    oQuery.Query = ""
    itemCollectionPMR = lPmr.GetItems(oQuery)
  End Using
End Using

+1 James

Vous devriez aussi essayer d'utiliser l'outil SharePoint Éliminez Checker dans vos projets pour analyser votre code pour les fuites de mémoire potentiels et appliquer les meilleures pratiques.

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