Cuando se crean gran cantidad de objetos del tipo SPWeb y/o SPSite en un aplicación para SharePoint (una WebPart, por ejemplo), se corre el riesgo de que el uso de memoria interna de los servidores aumente espectacularmente, con la consecuencia de una pérdida de respuesta y aumento de los tiempos de respuesta.
Asegurándose de que las referencias a SPWeb y/o SPSite sean anuladas con una llamada al respectivo método "Dispose", se libera la memoria utilizada, y el sistema permanece funcionando de la forma indicada. Por ejemplo:
SPSite myColeccionDeSitios = new SPSite("http://UnServidor");
//Aquí es donde ocurren las cosas interesantes
myColeccionDeSitios.Dispose(); //Libera la memoria usada
//o usando Close() se consigue el mismo efecto
myColeccionDeSitios.Close(); //Libera la memoria usada
o usando el estamento "using" no es necesario utilizar "Dispose" o "Close"
using(SPSite myColeccionDeSitios = new SPSite("http://UnServidor")
{
//De nuevo algo interesante
}
Excepción muy importante aquí es que si se crea la referencia utilizando el método "GetContextWeb" o "GetContextSite", NO se debe usar "Dispose" o "Close", porque este método usa un recurso compartido de SharePoint, como indica el articulo de Microsoft "You receive an access violation error message when you call the Dispose method or the Close method to close an SPSite object or an SPWeb object in SharePoint Portal Server 2003 and in Windows SharePoint Services"