Domanda

Qual è delle migliori pratiche con la privacy Usando quando si lavora con SharePoint oggetti. Quando e come si dovrebbe utilizzare l'istruzione Utilizzando, quindi oggetti usati sono disposte, etc?

È stato utile?

Soluzione

La chiave è se il codice crea un'istanza di uno SPSite o SPWeb è necessario disporre di esso. Tuttavia, se si utilizza un'istanza da SPContext.Current non si dovrebbe disporre di esso. vale a dire disporre di ciò che si crea, se tale è, direttamente o indirettamente.

è richiesto Esempio di creare il proprio esempio, in modo da utilizzare:

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

Esempio di utilizzo di un oggetto esistente dalla SPContext, in modo da utilizzare non è richiesta:

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

Esempio di creare il proprio un'istanza di uno SPWeb chiamando OpenWeb ():

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

Inoltre, fare attenzione a disporre di oggetti, anche se viene generata un'eccezione, mettendo la chiamata dispose nel blocco 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();
}

Questi sono solo alcuni esempi, ma ci sono molti altri. Ecco un di riferimento buon .

In aggiunta, è possibile fare uso dello strumento di SPDisposeCheck .

Altri suggerimenti

C'è una guida alle best practice di Microsoft su quando smaltire quali oggetti (SPSite, SPWeb): http://msdn.microsoft.com/en- us / library / ee557362 (v = office.14) aspx

Inoltre v'è uno strumento correttore dispose fornito da Microsoft: http://archive.msdn.microsoft.com/SPDisposeCheck

La regola d'oro sembra essere: se si possiede l'oggetto (vale a dire lo ha creato usando l'operatore new), allora si disporne. Se l'oggetto viene da un altro oggetto creato da SharePoint oggetto modello stesso, allora non è necessario. Utilizzare SPDisposeCheck per essere sicuri come Laurie indicato.

Mentre la risposta di cui sopra sono tutti bene, voglio solo aggiungere alcune cose per chiarezza.

Per vedere se l'oggetto si utilizza da smaltire, è possibile controllare il riferimento MSDN della classe (premere F1 quando il cursore è nella dichiarazione in VS) e controllare se i implementata dalla classe IDisposable. In tal caso, disporre solo l'oggetto se effettivamente fatto l'oggetto (sia con una nuova dichiarazione, o un metodo di OpenXXX () o simili).

La costruzione try-catch-finally è mai necessaria per questi oggetti se si utilizza l'istruzione using, perché nella compilation l'istruzione using verrà convertito in un try-catch-finally constuction come si vede nell'esempio finale di Laurie. L'istruzione using è preferibile perché è molto più elegante e renderà il codice più leggibile.

Lo SPDisposeCheck sembra uno strumento bello, ma con un po 'di buon senso si avrà probabilmente non averne bisogno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top