gg.*_*gg. 3 asp.net performance runatserver
我试图谷歌这个并且有点短,所以也许这里的人可以对这个主题有所了解.
对于asp.net中的URL重写目的,我想使用runat ="server"属性声明我的应用程序中的所有图像和其他资源,以利用"〜/ images"服务器路径语法.当使用相对路径时(使用url重写时),在locahost上调试尤其困难.我知道我可以修改主机文件来解决这个问题,但由于我们处理的项目数量很多,这是不可行的.
将html控件声明为runat服务器通常会添加到viewstate以启用数据持久性,但这与图像无关,或者我对此有误......?
我也意识到有更多的控件可以处理和处理asp net运行时引擎,但这真的是一个严重的性能消耗......?
以这种方式声明图像是否存在严重的开销,如果是这样,有人可以解释性能敲击的大部分来自何处.
提前致谢.
假设您要求以下区别:
1) <img runat="server" EnableViewState="false" src="~/images/img.png" />
Run Code Online (Sandbox Code Playgroud)
和
2) <img src='<%= ResolveUrl ("~/images/img.png") %>' />
Run Code Online (Sandbox Code Playgroud)
要构建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";
Run Code Online (Sandbox Code Playgroud)
然后将__ctrl添加到控制树:
__parser.AddParsedSubObject(this._bctrl_1); // _bctrl_1 is __ctrl from above
Run Code Online (Sandbox Code Playgroud)
页面生命周期中的任何事件(Init,Load ...)都将传播到此控件,将调用RenderControl从中获取HTML,调用ResolveUrl()以获取实际URL,最后调用Dispose()也会被召唤.
现在,在情况2)中,控件没有以正常方式添加到其父级,而是你得到这样的东西:
__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.__RenderTree));
Run Code Online (Sandbox Code Playgroud)
这是设置一个委托,当它的时间呈现<img>时将被调用.在__RenderTree中,编写我们感兴趣的标记的部分是:
__output.Write("\n<img src='");
__output.Write( ResolveUrl ("~/image.png") );
__output.Write("' />\n");
Run Code Online (Sandbox Code Playgroud)
所以,是的,在1)中运行的"很多"代码不在2)中运行.现在,就实际执行时间的影响而言,我认为这不是什么大不了的事.我测试了一个只有img标签/控件的空页面,并且它们在几次运行中的差异在每个请求的-0.5ms/+ 0.5ms范围内.完全可以忽略不计.
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |