Controller类型的缓存
为了避免频繁地遍历所有程序集对目标Controller类型进行解析ASPNET MVC对解析出来的Controller类型进行了缓存以提升性能与针对用于Area注册的AreaRegistration类型的缓存类似Controller激活系统同样采用基于文件的缓存策略用于保存Controller类型列表的名为MVCControllerTypeCachexml的文件保存在ASPNET的临时目录下面具体的路径如下
%Windir%\MicrosoftNET\Framework\v{version}\TemporaryASPNET Files\{appname}\…\…\UserCache\
%Windir%\MicrosoftNET\Framework\v{version}\Temporary ASPNET
Files\root\…\…\UserCache\
其中第一个针对寄宿于IIS中的Web应用后者针对直接通过Visual Studio Developer Server作为宿主的应用而用于保存所有AreaRegistration类型列表的MVCAreaRegistrationTypeCache xml文件也保存在这个目录下面
当接收到Web应用被启动后的第一个请求时Controller激活系统会读取这个用于缓存所有Controller类型列表的ControllerTypeCachexml文件并反序列化成一个List<Type>对象只有在该列表为空的时候才会通过遍历程序集和反射的方式得到所有实现了接口IController的类型而被解析出来的Controller类型重新被写入这个缓存文件中这个通过读取缓存文件或者重新解析出来的Controller类型列表被保存到内存中在Web应用活动期间内被Controller激活系统使用
下面的XML片段反映了这个用于Controller类型列表缓存的MVCControllerTypeCache xml文件的结构从中可以看出它包含了所有的Controller类型的全名和所在的程序集和托管模块的名称
<?xml version= encoding=utf?>
<!This file is automatically generated Please do not modify the contents of this file>
<typeCache lastModified=// :: PM
mvcVersionId=badbedccfcd>
<assembly name=ArtechAdmin Version= Culture=neutral
PublicKeyToken=null>
<module versionId=ebefdaafbdceeed>
<type>ArtechAdminHomeController</type>
<type>ArtechAdminEmployeeController </type>
</module>
</assembly>
<assembly name=ArtechPortal Version= Culture=neutral
PublicKeyToken=null>
<module versionId= FEEFAAEEBDC>
<type>ArtechPortalControllersHomeController</type>
<type>ArtechPortalProductsController</type>
</module>
</assembly>
</typeCache>
返回目录ASPNET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战