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)
SPDisposeCheck报告这是一个错误,因为一旦你从这个方法返回它,它不够聪明,无法知道你在使用newWeb做什么.只要在调用CreateSiteFromSTP()之后处理newWeb,就不会有内存泄漏.
如果您确信在此方法中没有内存泄漏,则可以将SPDisposeCheck设置为仅忽略此特定警告.只需在CreateSiteFromSTP方法上方添加以下声明(使用正确的SPDisposeCheckID号码):
[SPDisposeCheckIgnore(SPDisposeCheckID.SPDisposeCheckID_110, "Caller will dispose")]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1249 次 |
最近记录: |