Como manter meu aplicativo ASP.NET sempre “vivo”, e se a sua uma má idéia, porque não devo fazê-lo?

StackOverflow https://stackoverflow.com/questions/817655

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu implantado recentemente uma aplicação ASP.NET para o meu novo VPS brilhantes e enquanto eu estou feliz com o aumento de desempenho geral de que um VPS pode dar mais de uma solução de hospedagem compartilhada, estou infeliz com o tempo de inicialização do meu aplicação.

A minha aplicação web leva uma quantidade razoável de tempo para iniciar quando o meu primeiro cliente atinge. Eu não estou executando-o no modo de depuração (desativada que no meu web.config), e ele não tem qualquer trabalho real para fazer na inicialização - Não tenho nenhum código no meu manipulador de evento de início da aplicação, eu não iniciar qualquer tópicos extras, nada. A primeira vez que meu cliente atinge a minha candidatura é preciso uma boa 15-20 segundos para responder. As chamadas subseqüentes tomar 1-2 segundos, a menos que eu espere alguns minutos para o meu pedido para desligar. Então, de volta a um tempo de inicialização de 15-20 segundo.

(Estou ciente de que minha referência timing é muito científico, esses números devem apenas dar uma sensação para o desempenho na inicialização do meu aplicativo).

O meu entendimento de ASP.NET foi que IIS (7,0, neste caso), compila uma aplicação web a primeira vez que ele já é executado e, em seguida, armazena em cache os binários até o momento uma como a aplicação web é alterado. É minha compreensão incorreta?

Assim, depois que o prefácio do livro de tamanho, aqui estão minhas perguntas:

  • É minha compreensão de compilação do ASP.NET incorreta? Como ele realmente funciona?
  • Existe uma maneira que eu posso forçar IIS para armazenar em cache os binários, ou manter meu aplicativo vivo indefinidamente?
  • Se é uma má idéia fazer uma das coisas na minha pergunta anterior, porque é uma má idéia, eo que eu posso fazer, em vez de aumentar o desempenho de inicialização?

Obrigado!

Editar: parece a minha pergunta é uma ligeira duplicata de esta questão (eu pensei que fez um trabalho melhor de procurar uma resposta para esta aqui, haha). Penso, no entanto, que a minha pergunta é mais abrangente, e eu apreciaria se não foi fechada como uma duplicata a menos que haja melhor, perguntas já feitas aqui que resolver esta questão.

Foi útil?

Solução

O IIS também desliga o aplicativo web após um determinado período de tempo, dependendo de sua configuração. Eu não sou tão familiarizado com IIS7 e onde configurar isso, então você pode querer fazer uma pequena pesquisa sobre como configurar isso ( ponto de partida? ).

É ruim? Depende de quão bom o seu código é. Se você não está com vazamento de memória ou recursos, provavelmente não.

A outra solução é precompile seu site . Esta pode ser a melhor opção para você. Você vai ter que dar uma olhada e ver, no entanto, como ele pode vir com uma desvantagem, dependendo de como você interage com o seu site.

Outras dicas

O meu entendimento de ASP.NET foi que IIS (7,0, neste caso), compila uma aplicação web a primeira vez que ele já é executado e, em seguida, armazena em cache os binários até o momento uma como a aplicação web é alterado. É minha compreensão incorreta?

Isso está correto. Especificamente, os conjuntos são construídos como cópias de sombra (não ser confundido com o recurso de cópia serviço / sombra do volume instantâneo). Isso permite que você substitua o código na pasta na mosca sem afetar sessões em execução existentes. ASP.NET irá detectar a mudança, e compilar novas versões para o diretório de destino (geralmente Temporary ASP.NET Files). Mais informações sobre esse processo: Compreender ASP.NET dinâmico Compilation

Se a sua puramente o tempo de compilação, então muitas vezes a abordagem mais eficiente é para bater o site mesmo após a reciclagem. Fazer uma chamada em intervalos regulares para garantir que é você quem recebe o atraso de 15 segundos não o seu cliente.

Eu ficaria surpreso se isso é tudo o tempo de compilação no entanto (dependendo do hardware) - você tem um monte de instâncias estáticas de aulas? Eles fazem um monte de trabalho no start-up?

De qualquer com rastreamento ou de perfil você provavelmente poderia funcionar muito rapidamente, onde o tempo de arranque foi gasto.

Quanto ao porquê de manter um processo de volta é uma má idéia, eu acredito que o seu devido para limpar-up. Não importa o quão bem nós cuidar de nossos dados ou quão bem comportado a GC é, há uma boa realizado claro-up, reiniciando o processo. Coisas como a fragmentação pode ir embora e quaisquer outros problemas de recursos que se acumulam ao longo do tempo são apuradas para baixo. Por isso, é bastante uma má idéia para manter um processo do servidor rodando indefinidamente.

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