PortalSiteMapProvider вызывает чрезмерное количество объектов SPRequest

У нас есть настраиваемая веб-часть навигации, которая использует PortalSiteMapProvider из MOSS для создания навигации по меню. Похоже, что Провайдер не управляет своими объектами. Любая идея о том, как управлять объектами, которые создаются в провайдере?

Это вызывает ошибки журнала, например, так:

Потенциально избыточное количество объектов SPRequest (9), в настоящее время не выпущенных в потоке 1. Убедитесь, что этот объект или его родительский объект (например, SPWeb или SPSite) правильно утилизируется. Идентификатор распределения для этого объекта: {56D66DBA-AE72-42DF-A70F-B45E05A60A08} Трассировка стека текущего выделения:
в Microsoft.SharePoint.SPRequestManager.Add(запрос SPRequest, булево совместное использование)
в Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(логическое значение bNotGlobalAdminCode, String strUrl, логическое значение bNotAddToContext, Byte[] UserToken, строковое имя пользователя, логическое значение bIgnoreTokenTimeout, логическое значение bAAs)
в Microsoft.SharePoint.SPWeb.InitializeSPRequest()
в Microsoft.SharePoint.SPWeb.EnsureSPRequest()
в Microsoft.SharePoint.SPWeb.get_Request()
в Microsoft.SharePoint.SPWeb.InitWebPublic()
в Microsoft.SharePoint.SPWeb.get_Exists()
в Microsoft.SharePoint.Publishing.CachedObjectFactory.CreateWebFromUrl(URL-адрес строки)
в Microsoft.SharePoint.Publishing.Navigation.SPNavigationSiteMapNode..ctor(PortalWebSiteMapNode webNode, узел SPNavigationNode, родительский узел PortalSiteMapNode, тип NodeTypes, URL-адрес строки, заголовок строки, описание строки)
в Microsoft.SharePoint.Publishing.Navigation.SPNavigationSiteMapNode.CreateSPNavigationSiteMapNode(PortalWebSiteMapNode webNode, узел SPNavigationNode, PortalSiteMapNode parentNode)
в Microsoft.SharePoint.Publishing.Navigation.PortalWebSiteMapNode.ProcessSPNavigationNode(узел SPNavigationNode, SPNavigationNode previousSibling, PortalSiteMapNode parentNode)
в Microsoft.SharePoint.Publishing.Navigation.PortalWebSiteMap.Node.PopulateNavigationChildren()
в Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapNode.GetNavigationChildren(NodeTypes includesTypes, NodeTypes includesHiddenTypes, OrderingMethod, метод AutomaticSortingMethod, логическое возрастание, Int32 lcid)
в Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapNode.GetNavigationChildren (NodeTypes включены HiddenTypes)
в Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapProvider.GetChildNodes(узел PortalSiteMapNode, NodeTypes включены HiddenTypes)
в Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapProvider.GetChildNodes(узел SiteMapNode)
в System.Web.SiteMapNode.get_ChildNodes()
в Microsoft.SharePoint.Publishing.Navigation.PortalHierarchicalEnumerable.System.Collections.IEnumerable.GetEnumerator()
в System.Web.UI.WebControls.Menu.DataBindRecursive(узел MenuItem, перечислимый IHierarchicalEnumerable)
в System.Web.UI.WebControls.Menu.DataBindRecursive(узел MenuItem, перечислимый IHierarchicalEnumerable)
в System.Web.UI.WebControls.Menu.DataBindItem(элемент MenuItem)
в System.Web.UI.WebControls.Menu.PerformDataBinding()
в System.Web.UI.WebControls.HierarchicalDataBoundControl.PerformSelect()
в System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
в System.Web.UI.WebControls.Menu.DataBind()
в System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
в System.Web.UI.WebControls.Menu.EnsureDataBound()
в System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e)
в System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e, логический registerScript)
в System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e)
в Microsoft.SharePoint.WebControls.AspMenu.OnPreRender(EventArgs e)
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Control.PreRenderRecursiveInternal()
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
в System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
в System.Web.UI.Page.ProcessRequest() в System.Web.UI.Page.ProcessRequestWithNoAssert(контекст HttpContext)
в System.Web.UI.Page.ProcessRequest (контекст HttpContext) в ASP.VIEWPAGE_ASPX_2077083467.ProcessRequest(контекст HttpContext)
в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
в System.Web.HttpApplication.ExecuteStep(шаг IExecutionStep, логический и завершен синхронно)
в System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(ошибка исключения)
в System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpCont

1 ответ

Решение

Сообщение в блоге Стефана Госснера, кажется, отвечает на вопрос. Проблема не в том, что объекты SPWeb не закрываются, а в том, что после достижения определенного порога (по умолчанию 8) выделений в журнале создается предупреждение. В зависимости от структуры вашего сайта, число будет создаваться. Учитывая вложенную природу навигации, объекты остаются открытыми во время обхода поддерева. Таким образом, объекты правильно утилизируются, просто более 8 (по умолчанию) остаются открытыми в данный момент времени.

Смотрите этот вопрос

Другие вопросы по тегам