Pergunta

Eu estou trabalhando em um aplicativo asp.net-mvc. O contexto de dados linq está sendo passado para os meus objetos de serviço por mapa estrutura. Eu tenho é ajustado para ter um escopo de híbrido. Isso tudo funciona muito bem.

protected override void configure()
{
    ForRequestedType<AetherDataContext>()
        .TheDefaultIs(() => new AetherDataContext())
        .CacheBy(InstanceScope.Hybrid);
}

O problema é que eu continuo correndo nossa memória, eu estou querendo saber se a interface IDisposable é sempre realmente sendo chamado.

Alguém tem alguma idéia?

Na falta deste Alguém tem alguma outra idéia para as coisas que podem estar causando meus exceções de memória?

Update:

Assim, algumas informações adicionais, eu apenas recheadas um par de métodos para o meu contexto de dados um pontos de freio colocar lá.

protected override void Dispose(bool disposing)
{
    Debug.WriteLine("Disposing: " + DateTime.Now);
    base.Dispose(disposing);
}

public new void Dispose()
{
    Debug.WriteLine("Disposing: " + DateTime.Now);
    base.Dispose();
}

Eu não tenho certeza que eu estou fazendo isso da maneira correta, eu estou supondo que o novo método será chamado?

De qualquer forma, nenhum dos pontos de freio foram atingidos. No entanto, o construtor da mesma classe foi chamado em cada solicitação embora. Não é ideal que estou pensando.

Foi útil?

Solução

Esta é quase uma cópia exata da pergunta que fiz 2 dias atrás: Sessão contendo itens de aplicação IDisposable

InstanceScope.Hybrid apenas armazena o objeto dentro HttpContext.Current.Items se ele existe ou armazenamento ThreadLocal contrário e InstanceScope.HttpSession funciona da mesma maneira que não seja ele usa o HttpSession e ThreadLocal. As vidas itens de coleção por solicitação, por isso, se você implementar o padrão apontado na minha pergunta que você deve ver disparo Descarte no final da solicitação atual.

Outras dicas

Ok, então a última versão do StructureMap (2.3.5) tem um método pouco útil chamado

HttpContextBuildPolicy.DisposeAndClearAll();
métodos de conveniência de limpeza no HttpContext e ThreadLocal. HttpContextBuildPolicy.DisposeAndClearAll (), ThreadLocalStoragePolicy.DisposeAndClearAll (). Chamar qualquer método será ejetado todas as instâncias em cache e chamar IDispose se o objeto é IDisposable.

Anteriormente os métodos dispose não estavam sendo chamado chamado, eu acrescentou que a Application_EndRequest e que são agora. Eu estou esperando que isso vai resolver alguns dos meus problemas de memória.

Veremos.

Portanto, a solução; sua Cassini causando os problemas. Basicamente, ele cria um novo contexto para cada pedido. É por isso que eu estava vendo o contexto ser criado de novo, por que motivo não foi chamando Eu descartável corretamente eu não faço idéia. Mas, novamente eu estou preparado para acreditar que isso é algo a ver com Cassini.

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