鉴于卸载动态编译的程序集(以回收内存)的唯一方法是卸载应用程序域,SharePoint 如何依赖 VirtualPathProviders,尤其是母版页和页面布局,而不会遇到此限制?
当母版页和页面布局频繁更新和发布时,可以通过各种设置延迟重启,但不能完全避免,对吗?
(缺乏这方面的信息是否归因于它是一个在发布模式中不常见的理论限制?您个人是否注意到母版页或布局的更改率导致应用程序不稳定?SharePoint 是否应该发出警告?)
任何利用动态 WebForms(默认情况下包括 MVC 视图)的 CMS 式功能都容易受到变化率不稳定性的影响,对吗?
非编译页面的更新:
无编译页面 在 ASP.NET 2.0 中,编译模型进行了重大重构和扩展。站点预编译可能是新功能中最受欢迎和要求最高的。另一个非常有趣的特性是无编译页面。它们是永远不会编译的特殊页面。那么无编译页面的最终目的是什么,它们与静态 HTML 页面有什么区别呢?首先,通过将 @Page 指令上的 CompilationMode 属性设置为 Never 来创建一个非编译页面。当请求非编译页面时,不会创建页面程序集并将其保存到磁盘。相反,页面构建器组件的一个实例被缓存在内存中,并用于为每个请求创建页面输出。页面构建器是一个特殊的组件,它支持页面解析器构建页面控制树。打开编译时,控制树用于获取要编译的类。当编译关闭时,控制树用于获取标记。不用说,如果你想让程序员有能力将自己的代码附加到页面上,类是必要的。非编译页面由服务器控件和文字组成,但根本不包含任何代码。
非编译页面并不适用于每个应用程序。它们专为提高具有数千页页面的大型网站的可扩展性而设计。非编译页面不能绑定到代码文件,也不能包含服务器端块。非编译页面中唯一允许的可执行代码是 $ 表达式。免编译页面有两个主要好处。在像 SharePoint 这样的安全环境中,无编译页面可防止开发人员编写可能导致托管环境出现问题甚至将其拆除的潜在错误代码。在基于内容的大型网站中,免编译页面避免了编译数千个页面的需要。
参考:
1 – http://haacked.com/archive/2009/04/22/scripted-db-views.aspx