Devo eliminar este SPWeb?
-
27-10-2019 - |
Pergunta
Eu estou esperando que alguém pode me ajudar. Eu preciso para obter a web raiz do site atual do SPContext. É facilmente feito com o seguinte
SPContext.Current.Site.RootWeb
Eu estou confortável com a ideia de que o objeto SPSite aqui no SPContext.Current. Site .RootWeb não deve ser descartado, mas que sobre o objeto SPWeb que estou recebendo do SPSite . Será que, quando o SPSite do disposto get, o SPWeb rootweb se disposto a? Ou eu preciso eliminá-lo eu mesmo?
Solução
As chamadas para SPSite.RootWeb não devem ser eliminados. Eliminação do SPSite também irá descartar o rootweb.
Há um erro no SPDisposeCheck onde bandeiras se você eliminá-lo, e se não o fizer (condenado de qualquer maneira!) Eu detalhou como eu resolver este neste blog , como você não pode usar um atributo SPDisposeCheckIgnore em blocos de privilégios elevados.
Outras dicas
Não, você não deve. Você deve apenas objetos dispose você está no controle de. Porque o contexto é algo criado pelo SharePoint que você não descarte este como outros objetos pode ser dependente deste.
Se você tivesse que criar sua própria instância de um SPWeb a partir desta propriedades de objetos do que precisaria ser eliminados. Ou seja ..
using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
// do something
}
Aqui está um artigo sobre as melhores práticas de descartar objetos do SharePoint.
http://msdn.microsoft.com /en-us/library/aa973248(v=office.12).aspx
Você deve usar normalmente SPSite e SPWeb em uma cláusula usando.
using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
using (SPWeb web = site.OpenWeb())
{
// TODO: code for using SPWeb object
}
}
Este automaticamente irá liberar corretamente o objeto SPWeb depois que você é feito com ele.