Pergunta

Eu tentei o google isso e veio um pouco curta, por isso, talvez alguém aqui possa lançar alguma luz sobre o tema.

Para reconfiguração de url fins de asp.net, eu gostaria de declarar todas as imagens e outros recursos na minha aplicação com o runat="server" atributo para aproveitar o "~/imagens" server sintaxe de caminho.Depuração na locahost é especialmente difícil quando são utilizados caminhos relativos (quando usando a regravação de url).Eu sei que pode modificar os arquivos de host para um pouco de superar este problema, mas isto não é viável, devido ao volume de projetos que trabalhar.

Declarando controles html para runat servidor normalmente seria adicionar o viewstate para permitir a persistência de dados, mas isso não seria relevante para as imagens, ou estou enganado com relação a isso...?

Eu também perceber que existem mais controles para o asp net mecanismo de tempo de execução para processar e tratar, mas isso é realmente um sério desempenho de drenagem...?

Há uma séria sobrecarga, a declaração de imagens dessa maneira, e se assim for, alguém poderia explicar exatamente onde a massa de desempenho bater virão.

Obrigado antecipadamente.

Foi útil?

Solução

Supondo que você está pedindo para as diferenças entre:

1) <img runat="server" EnableViewState="false" src="~/images/img.png" />

e

2) <img src='<%= ResolveUrl ("~/images/img.png") %>' />

Para construir 1), o código gerado (mais ou menos):

System.Web.UI.HtmlControls.HtmlImage __ctrl;
__ctrl = new System.Web.UI.HtmlControls.HtmlImage();
this._bctrl_1 = __ctrl;
__ctrl.EnableViewState = false;
__ctrl.Src = "~/image.png";

Depois que __ctrl é adicionado à árvore de controle:

__parser.AddParsedSubObject(this._bctrl_1); // _bctrl_1 is __ctrl from above

Qualquer evento no ciclo de vida da página (Init, Carregar...) é que serão propagadas para este controle, RenderControl vai ser chamado para obter o código HTML de ti, ResolveUrl() é chamado para obter a URL real, e, finalmente, Dispose() será chamado também.

Agora, no caso 2), o controle não é adicionado ao seu pai de maneira normal, mas, em vez disso, você terá algo como isto:

__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.__RenderTree));

Qual é a definição de um representante, que será chamada quando o seu tempo para processar o <img>.No __RenderTree a parte que grava a tag que estamos interessados é:

__output.Write("\n<img src='");
__output.Write( ResolveUrl ("~/image.png") );
__output.Write("' />\n");

Então, sim, há "um monte" de código que está sendo executado no 1) que não é executado em 2).Agora, quanto ao impacto na real, o tempo de execução eu acho que este não é o que de um grande negócio.Eu testei uma página vazia com nada, mas a tag img/controle e a diferença entre eles em várias corridas foi no intervalo de -0.5 ms/+0.5 ms por solicitação. Totalmente insignificante.

Outras dicas

Há uma significativa relativo a sobrecarga do mesmo supondo que você desativou todos os viewstate marlarky.No entanto, o absoluto o custo é, provavelmente, inperceptible para um usuário individual.

Considere a possibilidade de uma marcação, descrevendo uma série de elementos HTML, Ele é tratado como um simples literal de "controle", que de forma muito eficiente envia todo o seu conteúdo para a resposta no ponto apropriado da página de renderização.

Compare isso com todos os mesmos elementos sendo criada à medida que completa os controles com toda a criação de objeto, a análise do elemento de estilo, validação, etc, e a criação do estado local.Em seguida, o código é executado para tomar o estado local e praticamente compor a mesma marcação HTML utilizada para definir em que o ASP.NET página em primeiro lugar.

Claramente, em termos de memória e de CPU usando um monte de runat="server" está indo para o mais caro.Em um caso individual, provavelmente, este não é um problema, mas um site com atividade significativa que poderia muito bem ser.

Se você estiver desenvolvendo um aplicativo que será colocado em algum diretório virtual em um grande site, em seguida, utilizar caminhos relativos para as suas imagens.

Se você estiver desenvolvendo um aplicativo que é um site de sua própria, em seguida, no projeto ou propriedades do site de modificar o caminho Virtual na Desenvolvedor Web Server categoria para ser apenas "/".Dessa forma, quando a depuração, você não tem o extra /myprojectname/ parte da URL.Isso permitirá que você usar um caminho absoluto para alguns ativos ou pasta de imagens.

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