ASP.NET MVC 4中Controller类型的缓存
欢迎进入.NET社区论坛,与300万技术人员互动交流 >>进入
3.2.2 Controller类型的缓存
为了避免频繁地遍历所有程序集对目标Controller类型进行解析,ASP.NET MVC对解析出来的Controller类型进行了缓存以提升性能。与针对用于Area注册的AreaRegistration类型的缓存类似,Controller激活系统同样采用基于文件的缓存策略,用于保存Controller类型列表的名为MVCControllerTypeCache.xml的文件保存在ASP.NET的临时目录下面。具体的路径如下:
%Windir%\Microsoft.NET\Framework\v{version}\TemporaryASP.NET Files\{appname}\...\...\UserCache\
%Windir%\Microsoft.NET\Framework\v{version}\Temporary ASP.NET
Files\root\...\...\UserCache\
其中第一个针对寄宿于IIS中的Web应用,后者针对直接通过Visual Studio Developer Server作为宿主的应用。而用于保存所有AreaRegistration类型列表的MVC-AreaRegistrationTypeCache. xml文件也保存在这个目录下面。
当接收到Web应用被启动后的第一个请求时,Controller激活系统会读取这个用于缓存所有Controller类型列表的ControllerTypeCache.xml文件并反序列化成一个List<Type>对象。只有在该列表为空的时候才会通过遍历程序集和反射的方式得到所有实现了接口IController的类型,而被解析出来的Controller类型重新被写入这个缓存文件中。这个通过读取缓存文件或者重新解析出来的Controller类型列表被保存到内存中,在Web应用活动期间内被Controller激活系统使用。
下面的XML片段反映了这个用于Controller类型列表缓存的MVC-ControllerTypeCache. xml文件的结构,从中可以看出它包含了所有的Controller类型的全名和所在的程序集和托管模块的名称。
【责编:peter】