문제

여기에 누가 도움을 줄 수있는 SharePoint 전문가가 있기를 바랍니다.

여기에 문제가 있습니다. 내 SharePoint 로그에는이 라인이 여러 번 포함되어 있습니다.

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: {8D090AD2-5D55-42C2-9873-2D5486FE257C} To determine where this object was allocated, create a registry key at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\HeapSettings. Then create a new DWORD named SPRequestStackTrace with the value 1 under this key.

레지스트리를 편집하고 키를 추가했지만 스택 트레이스는 찾을 수 없습니다. SharePoint 로그 또는 이벤트 뷰어에 없습니다.

이 spsite/spweb leaks의 소스를 찾아서 고치는 것이 정말로 문제의 원인이 될 수도 있고 아닐 수도있는 코드를 편집 할 수는 없습니다. 누구든지 제안이 있습니까?

도움이 되었습니까?

해결책

레지스트리 변경을 포착하려면 영향을받는 프로세스 (W3wp.exe 재시작 IIS 인 경우)를 다시 시작해야합니다.

다른 팁

처분 경고를 확인하기위한 최상의 위치는 다음과 같습니다.

http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-3-0-dispose-patterns-by-example.aspx

귀하의 경우 OpenWeb ()는 사용으로 싸여 있어야합니다. 당신이 당신의 fianlly 블록에서 그것을 처분하는 경우 다른 "gotcha"인스턴스를 호출하는지 확인하기 위해 더 많은 코드를 표시하는 것이 좋습니다. 또한 SPContext 클래스에서 얻은 경우 특정 SPSITE 및 SPWEB 객체를 폐기하는 것은 불필요합니다.

객체의 처리를 추적하려면 상속을 상속받을 수 있고 onload 및 ondispose 메소드를 무시하여 동점 메시징 방식으로 로그인 할 수 있습니다.

코드를 읽으면 SPWEB 객체가 runwithelevatedPriviledges 대의원 외부에서 선언되었음을 나타냅니다. 이것은 SharePoint가 그들을 처분하는 방식에 영향을 줄 수 있습니다. 일반적으로 대의원 내부의 물체에 필요한 일을하는 것이 좋습니다.

로부터 http://msdn.microsoft.com/en-us/library/aa973248.aspx 앞에서 언급 한 링크 :

부름 Response.Redirect는 최종 블록을 실행하지 않습니다. 따라서 처리 또는 처리 전송이 발생하기 전에 객체를 폐기해야합니다.

예제 코드가 주어지면 Dispose () 호출이 최종적으로 블록에 있기 때문에 폐기되지 않는 개체를 계속 생성 할 수 있습니다.

내 제안은 코드를 다음과 같이 재구성하는 것입니다.

try 
{
    //instantiate the SPSite and SPWeb with elevated privileges:    
    SPSecurity.RunWithElevatedPrivileges(delegate() 
    {
        using (SPSite mySite = new SPSite(url)) 
        {
            using (myWeb = mySite.OpenWeb()) 
            {
                //do stuff here
            }
        }
    });
}

명령문을 사용하는 여러 계층이있는 경우, 이렇게 '스택'하고 코드가 압축 된 금액을 줄일 수 있습니다 (IF 문자가 다음 줄 또는 블록을 실행하는 방식과 유사).

try 
{
    //instantiate the SPSite and SPWeb with elevated privileges:    
    SPSecurity.RunWithElevatedPrivileges(delegate() 
    {
        using (SPSite mySite = new SPSite(url)) 
        using (myWeb = mySite.OpenWeb()) 
        {
            //do stuff here
        }
    });
}

나는 당신이 다음을 읽는 것을 제안합니다 :

이 조언 중 어느 것도 효과가 없다면. 보세요 WSS V3 및 MOSS 2007의 SPSITE/SPWEB 누출 문제 해결.

편집하다 : spsite 객체를 처분해야합니다. 그럴 것입니다 모든 SPWEB 물체를 자동으로 처리하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top