Pergunta

Cenário: Eu tenho uma aplicação ASP.NET empresa n-Tier implantado usando Web Deployment Projects. Todos os níveis produzir montagens independentes que é consumido pela aplicação ASP.NET.

Problema: Quando eu executar o aplicativo. pela primeira vez após a implantação leva muito tempo para carregar assemblies dependentes na memória. Mas uma vez carregado o seu aplicativo rápido iluminação. No caso, se não há usuários que acessam o aplicativo, o IIS descarrega as assembleias da memória e quando um usuário tentou acessar o aplicativo em uma instância mais tarde ele vai para carregar todas as igrejas, mais uma vez levando a mesma quantidade de tempo para carregar, pois leva a fazê-lo pela primeira vez.

Eu estou procurando uma solução que me permite manter minha assembléias carregado na memória persistente substituindo a natureza volátil dos conjuntos no sentido de residência memória.

ou qualquer outra solução que permite que meus usuários felizes para usar o aplicativo resolver o problema mencionado.

Foi útil?

Solução

Em IIS 6 , vá para a seção Application Pools, e clique com o botão direito> Propriedades no piscina, que hospeda o aplicativo ASP.NET em questão. Vá para a guia Desempenho e desmarque "processos de trabalho Shutdown depois de ficar ocioso para:"

Em IIS 7 , vá para o painel de conexões, encontrar Pools de Aplicativos, e selecione Configurações avançadas para a piscina, que hospeda o aplicativo. Encontre a propriedade "Tempo limite ocioso" e configurá-lo para "0" (Isso desativa-lo).

O padrão é 20 minutos de inatividade. Desmarcando a caixa, uma vez que seu AppDomain é carregado pelo trabalhador processo , ele nunca vai morrer (a menos que você matar o processo ou algo assim, é claro). Por padrão, o IIS reciclar o processo quando atinge um limite, como um limite de memória, mas que também irá começar um novo e 'fase mais' todas as solicitações recebidas até o antigo não é utilizada, de modo a minimizar a interrupção.

Eu também tenho escrito uma pequena # classe c que irá manter seu ASP.NET aplicativo vivo ( alternativo arquivado versão ) sob condições normais circunstâncias. Uma vez que é executado dentro do aplicativo, obviamente, não pode parar o IIS ou qualquer outra coisa de matar explicitamente o processo, mas vai manter o aplicativo "quente", por exemplo, o aplicativo nunca vai dar bastante longa ocioso para o IIS para decidir a desligá-lo.

Se você não tem controle direto sobre a configuração do IIS (servidor compartilhado, por exemplo) a sua melhor aposta é ter um pequeno aplicativo em execução em um sistema separado - digamos, um sempre-em estação de trabalho - que atinge seu site a cada x minutos para manter o pool de aplicativos a partir do tempo limite. Nada extravagante - um simples WebRequest e um tempo () circuito em um aplicativo de console vai fazer.

Outras dicas

Uma das vantagens do ASP NET é a posibilidade de criar estático (compartilhado) instâncias de objetos.

Para evitar a necessidade de um processo externo você pode criar um temporizador estática em (por exemplo) global.asax que apela a uma página no domínio com um WebRequest simples. Nesta forma como o site mantém viva a si mesmo até que um reset manual da piscina é feito.

Eu escrevi um pouco de C # aplicação de consola que mantém meus 4 locais vivos a cada 10 minutos via agendador de tarefas do Windows. A vida é, mais uma vez boa. Nós não executar o aplicativo a partir de 2-5am apenas para que os saques podem fazer quaisquer limpezas de memória, se ele ainda importa. para nossos sites raramente há alguém em pelo aquelas horas de qualquer maneira.

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