Paolo Pialorsi

SOA, Workflow Foundation (WF), Windows Communication Foundation (WCF) e le Architetture Distribuite

News

Archives

settembre 2010 - Posts

IDisposable di oggetti SP* … in SP2010 hanno fatto qualche fix

Forse alcuni di voi si saranno imbattuti nei problemi di memory leak legati al rilascio non deterministico delle risorse unmanaged in .NET e all’uso di oggetti SP* in SharePoint (soprattutto SPWeb, SPSite).

Vi sono però anche altri oggetti che internamente usano SPWeb e SPSite che dovrebbero rilasciare le risorse correttamente. Ad esempio abbiamo SPWebPartManager e SPLimitedWebPartManager che internamente usano un oggetto SPWeb e che implementano IDisposable. Come già evidenziato sulla rete in diversi post (qui e qui ad esempio) purtroppo in MOSS2007 l’implementazione di IDisposable non rilascia SPWeb in queste classi, introducendo dei “simpatici” bug subdoli.

Per fortuna in SP2010 hanno sistemato la cosa e il metodo di dispose di SPWebPartManager è il seguente:

 

public override void Dispose()
{
    base.Dispose();
    if (((this.m_web != null) && !this.m_web.IsClosed) && this.m_web.IsOwnedByWebPartManager)
    {
        this.m_web.Dispose();
    }
    if (this.m_rawWebPartManager != null)
    {
        this.m_rawWebPartManager.Dispose();
    }
    this.m_isValid = false;
}

 

Quindi le linee guida fornite nel famoso documento di “Best Practices: Using Disposable Windows SharePoint Services Objects” vanno un minimo adattate a SP2010.