Предупреждение о неиспользованных объектах в собственном коде SharePoint от Microsoft
Вопрос
Я нашел много предупреждений 8L1N о неисспозимых объектах в журналах SharePoint ULS. Интересно, что вся трассировка стека не показывает ничего в моем коде. Я не уверен, что искать в этом случае? Может ли это быть ошибкой конфигурации, которая привела к этому?
Как я могу избежать этого предупреждения?
Журнал ULS ниже:
An SPRequest object was not disposed before the end of this thread. To avoid wasting system resources, dispose of this object or its parent (such as an SPSite or SPWeb) as soon as you are done using it. This object will now be disposed. Allocation Id: {DBFA1F95-40DF-4AB6-BE88-3AE39F7E4E1F} This SPRequest was allocated at at Microsoft.SharePoint.Library.SPRequest..ctor() at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous) at Microsoft.SharePoint.SPWeb.InitializeSPRequest() at Microsoft.SharePoint.SPWeb.EnsureSPRequest() at Microsoft.SharePoint.SPWeb.get_Request() at Microsoft.SharePoint.SPWeb.get_All... 06/03/2009 10:21:05.10* w3wp.exe (0x170C) 0x10F8 Windows SharePoint Services General 8l1n High ...Properties() at Microsoft.SharePoint.ApplicationPages.PermissionSetupPage.GetParentWebAssociatedGroups() at Microsoft.SharePoint.ApplicationPages.PermissionSetupPage.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP._layouts_permsetup_aspx.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.H... 06/03/2009 10:21:05.10* w3wp.exe (0x170C) 0x10F8 Windows SharePoint Services General 8l1n High ...ttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error) at System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) at System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr) at System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
Решение
Да, иногда Microsoft не следит за своими лучшими практиками. Я упомянул это здесь: Утилизация SPWEB, созданных с использованием SPSite OpenWeb
Вы ничего не можете с этим поделать.
Другие советы
Вы должны просмотреть свой код и правильно утилизировать SPSITE, SPWEB (и другие), которые вы создаете сами (как в «Новом спибском (URL)» и sites.openweb ()). Эти объекты содержат неуправляемые объекты Sprequest, которые не будут автоматически утилизироваться.
Чтобы подтвердить вас в этом процессе, вы должны использовать Spdisposecheck (Я обычно устанавливаю SpdisposeCeck для автоматического запуска при создании своего кода).
Есть белая бумага На MSDN, который может помочь вам. Имейте в виду, что не все объекты SPSITE и SPWEB должны быть утилизированы. SPSITE и SPWEB, взятые из SPCONTEXT.CURRENT обычно не должны быть утилизированы. Для дальнейшего руководства, когда нет Утилизировать, см. Roger Lambs «Не утилизируйте руководство».
ПРИМЕЧАНИЕ. Приведенное выше предупреждение не следует путать с «потенциальным чрезмерным количеством объектов Sprequest ..» предупреждение в журнале ULS. Это предупреждение не обязательно указывает на то, что ваши объекты не утилизируются, просто вы открыли их много (например, при выполнении цикла через текущие веб -сайты). Это предупреждение может быть смягчено путем настройки Treshold до большего значения:
Hkey_local_machine Software Microsoft Shared Tools Extensions Heapsettings
LocalSPRequestWarnCount = 50
Дальнейшее чтение:
Лучшие практики: использование одноразовых объектов SharePoint Services
Automate SharePoint Dispose () обзоры кода с помощью spdisposecheck
SharePoint 2007/2010 «Не утилизируйте руководство» + Spdisposecheck
Устранение неполадок SPSITE/SPWEB утечки в WSS V3 и Moss 2007
SharePoint 2007 и WSS 3.0 утилизируют паттерны на примере
HTH Anders Rask