AutoEventWireup
使用反射按page_eventName
搜索页面方法
当AutoEventWireup为true时,处理程序会自动绑定到 运行时根据其名称和签名生成的事件。对于每个活动, ASP.NET搜索根据模式命名的方法 Page_eventname,例如Page_Load或Page_Init。
问题:
他是否为每个请求执行此操作?
我查看了temporary internet files
(位于Microsoft.net
文件夹...),看看他是否保存了另一个包含显式处理程序附件的文件 - 无法找到任何文件
答案 0 :(得分:4)
似乎ASP.NET使用缓存,正如@Marc所说。请参阅内部TemplateControl.HookUpAutomaticHandlers
。
使用dotPeek:
的方法的一部分internal void HookUpAutomaticHandlers()
{
...
object obj = TemplateControl._eventListCache[(object) this.GetType()];
if (obj == null)
{
lock (TemplateControl._lockObject)
{
obj = TemplateControl._eventListCache[(object) this.GetType()];
if (obj == null)
{
IDictionary local_1_1 = (IDictionary) new ListDictionary();
this.GetDelegateInformation(local_1_1);
obj = local_1_1.Count != 0 ? (object) local_1_1 : TemplateControl._emptyEventSingleton;
TemplateControl._eventListCache[(object) this.GetType()] = obj;
}
}
}
...
私有GetDelegateInformation
方法负责为控件创建委托。
TemplateControl._eventListCache
是Hashtable
,每个模板控件都包含代理。
所以,回答你的问题:
他是否为每次请求都这样做?
答案是否定的。 ASP.NET会一次填充此Hashtable
,然后使用缓存值。