将新页面或用户控件添加到ASP.NET webforms应用程序时,代码隐藏类包含一个空的Page_Load()事件处理程序:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
我有一个现有的网络应用程序,其中许多页面和控件仍然包含这些空事件处理程序(它们未被使用)。
问题:由于这些空事件处理程序是否会对性能产生影响,是否应将其从所有页面和控件中删除?
请注意:由于调用了空事件处理程序,我不是主要(或不仅仅)担心任何运行时开销。我还想知道页面(标记)是JIT编译的任何开销(因为事件处理程序必须连接到事件 - 可能使用一些反射代码)。
更新:到目前为止还没有真正的答案,所以我不接受任何一个。
答案 0 :(得分:4)
AutoEventWireup
未在编译时完成。当它设置为true
时,运行时必须使用Delegate.CreateDelegate
方法查找每个页面事件处理程序。这是一篇很好的文章,描述了这种行为:Inside AutoEventWireup。
在SO上也有类似的问题:autoeventwireup performance cost。
答案 1 :(得分:2)
虽然必须调整堆栈帧以进入和离开您的方法(并且什么都不做)而不是简单地调用基本实现(在这种情况下为System.Web.UI.Page
),但性能影响非常小并且很可能无法测量所以你应该没事。
答案 2 :(得分:0)
我很确定Page_Load是否存在。很像PreRender,或Page_Init。
删除它,对性能无效。