欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由

程序员文章站 2022-06-17 09:27:49
2.AreaRegistration的缓存 Area的注册(主要是基于Area的路由映射注册)通过具体的AreaRegistration来完成。在应用启动的时候,ASP.NET...

2.AreaRegistration的缓存

Area的注册(主要是基于Area的路由映射注册)通过具体的AreaRegistration来完成。在应用启动的时候,ASP.NET MVC会遍历通过调用BuildManager的静态方法GetReferencedAssemblies得到的程序集列表,并从中找到所有AreaRegistration类型。如果一个应用涉及太多的程序集,则这个过程可能会耗费很多时间。为了提高性能,ASP.NET MVC会对解析出来的所有AreaRegistration类型列表进行缓存。

ASP.NET MVC对AreaRegistration类型列表的缓存是基于文件的。具体来说,当ASP.NET MVC框架通过程序集加载和类型反射得到了所有的AreaRegistration类型列表后,会对其序列化并将序列化的结果保存为一个物理文件。这个名为“MVC-AreaRegistrationTypeCache-xml”的XML文件被保存在ASP.NET的临时目录下,具体的路径如下。其中第一个针对寄宿于Local IIS中的Web应用,后者针对直接通过Visual Studio Developer Server或者IIS Express作为宿主的应用。

1.%Windir%\Microsoft.NET\Framework\v{version}\TemporaryASP.NET Files\{appname}\...\...\UserCache\

2.%Windir%\Microsoft.NET\Framework\v{version}\TemporaryASP.NET Files\root\...\...\UserCache\

下面的XML片段体现了这个作为所有AreaRegistration类型缓存的XML文件的结构。我们从中可以看到所有的AreaRegistration类型的名称,连同它所在的托管模块和程序集名称都被保存了下来。当AreaRegistration的静态方法RegisterAllAreas被调用之后,系统会试图加载该文件,如果该文件存在并且具有期望的结构,那么系统将不再通过程序集加载和反射来解析所有AreaRegistration的类型,而是直接对文件内容进行反序列化得到所有AreaRegistration类型的列表。

 



vcversionid="72d59038-e845-45b1-853a-70864614e003">


Artech.Admin.AdminAreaRegistration




Artech.Portal.PortalAreaRegistration




 

如果这样的XML不存在,或者具有错误的结构(这样会造成针对AreaRegistration类型列表的反序列化失败),ASP.NET MVC框架会按照上述的方式重新解析出所有AreaRegistration类型列表,并将其序列化成XML保存到这个指定的文件中。值得一提的是,针对Web应用的程序编译会促使这些缓存文件的清除。