Sharepoint SPDisposeCheck

use*_*176 4 sharepoint dispose

SPDisposeCheck实用程序提醒我一个不正确处理的SPWeb.Add调用.正如您在下面所看到的,典型的使用(SPWeb NewWeb = webs.add(siteUrl ....)方法不起作用,因为RunWithElevatedPrivileges会使返回newWeb脱离上下文.

通过查看下面的newWeb = webs.Add()行,是否有人可以建议一种方法来正确处理新的SPWeb对象?提前致谢.

public partial class SiteHelper                         
{                               
    public static SPWeb CreateSiteFromSTP(SPWeb parentWeb, string newSiteSTP, int teamId)   
    {                               
        try                     
        {                       
            SPWeb newWeb = null;        
            SPSecurity.RunWithElevatedPrivileges(delegate()    
            {                   
                string siteUrl = teamId.ToString();         
                SPWebCollection webs = parentWeb.Webs;      
                newWeb = webs.Add(siteUrl,.,.,.,);
                TraceProvider.WriteLine("Activating Feature : MembersFeature ");        
                newWeb.Features.Add(new Guid(TeamSiteAttributes.MembersFeature), true);     
                TraceProvider.WriteLine("Activating Feature : BadgeAwardsFeature ");        
                newWeb.Features.Add(new Guid(TeamSiteAttributes.BadgeAwardsFeature), true);     
                TraceProvider.WriteLine("Activating Feature : ProjectBenefitsFeature ");    
                newWeb.Features.Add(new Guid(TeamSiteAttributes.ProjectBenefitsFeature), true);     
                TraceProvider.WriteLine("Activating Feature : TeamScoreFeature ");          
                newWeb.Features.Add(new Guid(TeamSiteAttributes.TeamScoreFeature), true);   
                newWeb.Update();            
                parentWeb.Update();             
            });                     
            return newWeb;              
        }   
        catch (Exception ex)        
        {                       
            TraceProvider.WriteLine("Error", ex);           
            throw;
        }
    }   
} 
Run Code Online (Sandbox Code Playgroud)

Ale*_*gas 6

SPDisposeCheck报告这是一个错误,因为一旦你从这个方法返回它,它不够聪明,无法知道你在使用newWeb做什么.只要在调用CreateSiteFromSTP()之后处理newWeb,就不会有内存泄漏.

如果您确信在此方法中没有内存泄漏,则可以将SPDisposeCheck设置为仅忽略此特定警告.只需在CreateSiteFromSTP方法上方添加以下声明(使用正确的SPDisposeCheckID号码):

[SPDisposeCheckIgnore(SPDisposeCheckID.SPDisposeCheckID_110, "Caller will dispose")]
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果将SPDisposeCheckIgnore复制到自己的程序集中,则必须保留名称空间.SPDisposeCheck.exe检查Type.FullName =="SPDisposeCheck.SPDisposeCheckIgnoreAttribute"的属性 (3认同)