Frage

Ich hoffe, es gibt hier einen Sharepoint-Experten für SO, die dabei helfen können.

Hier ist das Problem. Meine Sharepoint-Protokolle enthalten diese Zeile, mehrmals:

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.

Ich bearbeiten die Registrierung und hinzugefügt, um den Schlüssel, aber das ist stacktrace nirgends zu finden. Es ist nicht in den Sharepoint-Protokollen oder in der Ereignisanzeige.

Ich brauche wirklich die Quelle dieser SPSite / SPWeb Lecks zu finden und zu lösen, aber ich kann einfach nicht starten Code bearbeiten, die nicht die Ursache des Problems sein kann oder nicht. Hat jemand irgendwelche Vorschläge?

War es hilfreich?

Lösung

Sie müssen die betroffenen Prozesse neu zu starten (wenn es w3wp.exe Neustart IIS) die Änderung der Registrierung zu fangen.

Andere Tipps

Bei weitem die beste Lage Entsorgung Einschränkungen für die Überprüfung ist:

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

In Ihrem Fall OpenWeb () muß in einem mit eingewickelt werden. Wenn Sie es in Ihrem fianlly Block Entsorgung dann würde ich vorschlagen, mehr Code zeigt, um zu sehen, wenn Sie irgendwelche andere „Gotcha“ Instanzen anrufen. Es ist auch unnötigen zu entsorgen bestimmter SPSite und SPWeb-Objekte, wenn sie von der SPContext Klasse erhalten werden.

Wenn Sie Abgängen des Objekts verfolgen Sie sie erben konnte und die onload außer Kraft setzen und ondispose Methoden, um sie in einer ausführlichen Messaging Art und Weise zu protokollieren.

Ihr Code Lesen legt nahe, dass das SPWeb Objekt außerhalb des RunWithElevatedPriviledges Delegierten erklärt. Dies kann Auswirkungen auf die Art und Weise haben Sharepoint von ihnen verfügt. Es wird allgemein vorgeschlagen, zu tun, was Sie an das Objekt innerhalb des Delegierten tun müssen.

Von der http://msdn.microsoft.com/en-us /library/aa973248.aspx Link, die zuvor erwähnt wurde:

  

Der Aufruf Response.Redirect WIRD die schließlich nicht ausführen blockieren . Deshalb,   vor jeder Umleitung oder die Übertragung der Verarbeitung auftreten können, müssen Sie verfügen   die Objekte.

Ihr Beispielcode gegeben, könnten Sie noch Objekte werden erzeugt, das angeordnet nicht bekommen, weil die Dispose () -Aufruf in der finally-Block.

Mein Vorschlag wäre, um Ihren Code zu folgenden neu zu konfigurieren:

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
            }
        }
    });
}

Wenn Sie mehrere Schichten der Verwendung von Aussagen haben, können Sie ‚Stapel‘ sie so und reduzieren die Menge der Code eingerückt wird (ähnlich wie eine if-Anweisung führt die nächste Zeile oder Block):

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
        }
    });
}

Ich schlage vor, Sie lesen zu übernehmen:

Wenn keine dieser Beratung funktioniert. Werfen Sie einen Blick auf Fehlerbehebung SPSite / SPWeb Lecks in WSS v3 und MOSS 2007 .

Bearbeiten : Sie sollten das SPSite-Objekt verfügen. Da es verfügen alle seine SPWeb Objekt automatisch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top