2006-06-17

Gör så här när du kodar mot SPSite och SPWeb

Det handlar om att vara väldigt noggrann med hur du hanterar objekt av klasserna SPSite och SPWeb, för att undvika att applikationen äter upp minnet för dig.
Several of the Windows SharePoint Services objects, primarily the SPSite class and SPWeb class objects, are created as managed objects. However, these objects use unmanaged code and memory to perform the majority of their work. The managed part of the object is small; the unmanaged part of the object is much larger. Because the smaller managed part of the object does not put memory pressure on the garbage collector, the garbage collector does not release the object from memory in a timely manner. The object's use of a large amount of unmanaged memory can cause some of the unusual behaviors described earlier. Calling applications that work with IDisposable objects in Windows SharePoint Services must dispose of the objects when the applications finish using them. You should not rely on the garbage collector to release them from memory automatically.
Artikeln är skriven för WSS v3 men gäller för såväl WSS 2.0 som SPS 2003. Värt att notera är att vi har praktiserat detta under lång tid - bra att Microsoft nu äntligen kommer med en heltäckande rekommendation, det var några vinklar som jag hade missat.

Principen är enkel: se till att du ovillkorligen anropar Dispose() när du är färdig med objektet. Det finns olika sätt att göra detta. Jag brukar lägga ett block med using runt den kritiska koden, vilket ger samma effekt, så här:

String str; 

using (SPSite oSPsite = new SPSite("http://server"))
{
using (SPWeb oSPWeb = oSPSite.OpenWeb())
{
str = oSPWeb.Title;
str = oSPWeb.Url;
}
}
Microsofts artikel med rekommendationer och kodexempel här: Best Practices: Using Disposable Windows SharePoint Services Objects.

Technorati tags: ,

0 Comments:

Skicka en kommentar

Links to this post:

Skapa en länk

<< Home