gpt4 book ai didi

asp.net - 对 html 控件使用 runat=server 的性能问题

转载 作者:行者123 更新时间:2023-12-01 12:00:51 25 4
gpt4 key购买 nike

我试着用谷歌搜索这个,结果有点短,所以也许这里有人可以阐明这个话题。

为了在 asp.net 中重写 url,我想在我的应用程序中使用 runat="server"属性声明所有图像和其他资源,以利用 "~/images"服务器路径语法。当使用相对路径时(使用 url 重写时),在 locahost 上调试尤其困难。我知道我可以修改主机文件以在某种程度上克服这个问题,但由于我们从事的项目数量众多,这是不可行的。

向 runat 服务器声明 html 控件通常会添加到 View 状态以启用数据持久性,但这与图像无关,或者我对此有误...?

我也意识到asp net运行时引擎有更多的控件来处理和处理,但这真的是一个严重的性能消耗吗...?

以这种方式声明图像是否有严重的开销?如果有,有人可以解释一下大部分性能下降的确切原因。

提前致谢。

最佳答案

假设您要求的是:

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

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

要构建 1),实际生成的代码(或多或少)是:

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

然后将 __ctrl 添加到控件树中:

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

页面生命周期中的任何事件(Init、Load...)都将传播到此控件,将调用 RenderControl 以从中获取 HTML,调用 ResolveUrl() 以获取实际 URL,最后, Dispose() 也会被调用。

现在,在第 2 种情况下,控件不会以正常方式添加到其父级,而是得到如下内容:

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

它设置了一个委托(delegate),当它渲染 时将被调用。在__RenderTree中写入我们感兴趣的标签的部分是:

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

所以,是的,有“很多”代码在 1) 中运行,但在 2) 中没有运行。现在,就实际执行时间的影响而言,我认为这没什么大不了的。我测试了一个只有 img 标签/控件的空页面,在几次运行中它们之间的差异在每个请求的 -0.5ms/+0.5ms 范围内。 完全可以忽略不计

关于asp.net - 对 html 控件使用 runat=server 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com