Pergunta

Eu estou apenas procurando por um pouco de verificação de sanidade em um presente!

Eu estou olhando para muitas classes que têm SPSite ou SPWeb como um construtor para a classe.

A classe é instanciado usando SPContext.Site como o parâmetro SPSite

exemplo:

public MyClass {
  SPWeb _web;
  public MyClass(SPSite site) {
    _web = site.RootWeb;
  }
  // Other methods that make use of _web
}

Deve _web ser eliminado?É _web apenas um ponteiro para SPContext.O Site.RootWeb ou existe outra cópia do SPWeb que precisam ser eliminadas?

Eu sei que com SPContext.Site.OpenWeb() você deve chamar Dispose().

Então, o que sobre com o que está acima de utilização?

Vai passar SPSite / SPWeb como atribuir a uma variável local só tem a referência para o mesmo SPContext ?

Foi útil?

Solução

No seu caso _web não precisa ser descartado como você estão recebendo-o RootWeb e objetos da web obtidos a partir RootWeb não precisa ser descartado.

EIDT

Além disso, se o SPSite objeto passado como parâmetro para o construtor é derivada da SPContext, ele não precisa ser descartado.Caso contrário, ele precisa ser eliminados na chamada classe ou da chamada classe dependendo da necessidade.

Outras dicas

Não explicitamente chamar Dispose() no SPSite.RootWeb propriedade.O descarte de limpeza será processado automaticamente pelo SharePoint e .NET framework.Para o SharePoint existente personalizações de remoção de explícita RootWeb Descarte é recomendado para evitar um caso de borda condição onde o SPContext.Atual.A Web tem a igualdade para o SPSite.RootWeb.Problemas podem ocorrer quando deitar fora RootWeb quando obtidos a partir de qualquer variação de SPContext (Por Exemplo:SPContext.O Site.RootWeb, SPContext.Atual.O Site.RootWeb e GetContextSite(Contexto).RootWeb ).

Para mais visita...MSDN

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top