Вопрос

Я надеюсь, что здесь есть эксперт SharePoint по SO, который сможет помочь с этим.

Вот в чем проблема.Мои журналы 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.

Я отредактировал реестр и добавил ключ, но stacktrace нигде не найден.Этого нет ни в журналах SharePoint, ни в средстве просмотра событий.

Мне действительно нужно найти источник этих утечек на SPSite / SPWeb и исправить их, но я не могу просто начать редактировать код, который может быть источником проблемы, а может и не быть.У кого-нибудь есть какие-нибудь предложения?

Это было полезно?

Решение

Вам нужно перезапустить затронутые процессы (если это w3wp.exe, перезапустить IIS), чтобы отследить изменение реестра.

Другие советы

С http://msdn.microsoft.com/en-us /library/aa973248.aspx ссылка, которая была ранее упомянута:

  

Вызов Response.Redirect НЕ БУДЕТ выполнять блок finally . Следовательно,   прежде чем произойдет какое-либо перенаправление или передача обработки, вы должны   из объектов.

Учитывая ваш пример кода, вы все равно можете генерировать объекты, которые не удаляются, потому что вызов Dispose () находится в блоке finally.

Мое предложение было бы изменить конфигурацию вашего кода следующим образом:

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

Если у вас есть несколько уровней операторов Using, вы можете «сложить» их следующим образом и уменьшить объем кода, с отступом (аналогично тому, как инструкция 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
        }
    });
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top