SPC110204: Dispose SPSite objects created with SPSite.SelfServiceCreateSite

The SelfServiceCreateSite method (all signatures) create an SPWeb object and return it to the caller. This new object is not stored in the SPSite object and is not disposed of anywhere in the SPSite class. For this reason, you should dispose of any object created via these methods.

TypeName: DisposeSPSiteCreatedBySelfServiceCreateSite
CheckId: SPC110204
Severity: CriticalWarning
Type: AssemblyFileReference
Resolution

Call Dispose on returned SPSite object or wrap instruction into using statement. See sample from MSDN:

Bad Coding Practice

void SelfServiceCreateSiteLeak()
{
  using (SPSite siteCollection = new SPSite("http://moss"))
  {
    SPSite site = siteCollection.SelfServiceCreateSite(...);
    // SPSite object site leaked.
  }  // SPSite object siteCollection.Dispose() automatically called.
}

Good Coding Practice
void SelfServiceCreateSiteNoLeak()
{
  using (SPSite siteCollection = new SPSite("http://moss"))
  {
    using (SPSite site = siteCollection.SelfServiceCreateSite(...))
    {
    } // SPSite object site.Dispose() automatically called.
  }  // SPSite object siteCollection.Dispose() automatically called.
}

Remarks

Rule does not relate to an existing SPDisposeCheckId and defines its own ID 'SPDisposeCheckID_600'. To ignore this rule add the attribute '[SPDisposeCheckIgnore(SPDisposeCheckID.SPDisposeCheckID_600, "Caller will dispose")]' to your method.

Links

comments powered by Disqus