【发布时间】:2014-04-25 15:26:25
【问题描述】:
我正在使用 ASP.NET MVC3、.NET4、Razor、C#、EF4.1、MS SQL2008(dev)、SQL Azure(test,live)。
我正在将我的 Web 应用程序部署到“标准”Azure 网站。我的流程是:
1) 发布到本地 IIS 文件夹,未选择预编译选项:
项目 C# 代码编译为项目 dll 并放入“bin”文件夹。
视图保留为源 *.cshtml 文件
2) FTP 使用 Beyond Compare 将文件更改到部署服务器,所以
项目 DLL 被复制
源 *.cs 文件(控制器、助手、模型)被复制。
更改源 *.cshtml 视图被复制
对于部署服务器的初始调用,由于 JIT 编译,响应很慢。我怀疑这是由于:
a) 正在编译的视图。与项目 dll 相对的主要因素??
b) 项目 DLL 已经预编译,所以这里没有问题???这对吗?
我尝试通过 pingback 服务将应用程序池保存在内存中,无论是外部监视器站点(Uptime Robot)还是 MS 的“始终在线”服务,都是一样的。但是仍然可以获得应用程序池刷新,从而减慢速度。在我看来,一切都应该为部署进行预编译,这样如果从内存中删除,那么重新运行会很快。
我的问题
1) 我对什么是预编译和什么不是预编译的理解正确吗?
2) 我现在应该怎么做才能最大限度地提高预编译并最大限度地减少这些应用程序池刷新损失,从而将性能保持在峰值,即没有开始一天的热身等。我最初的印象是预编译视图。我确实尝试过编辑 Project XML 文件,特别是这个设置:
<MvcBuildViews>true</MvcBuildViews>
但是,当我尝试使用上述设置发布时,出现错误:
obj\release\aspnetcompilemerge\source\web.config(45): error ASPCONFIG: 使用注册为 allowDefinition='MachineToApplication' 的部分超出应用程序级别是错误的。此错误可能是由于虚拟目录未在 IIS 中配置为应用程序所致。
编辑
做了更多研究后,我似乎需要专注于为存在的 2 个主要工具预编译视图:
a) RazorSingleFile
b) RazorGenerator
显然
<MvcBuildViews>true</MvcBuildViews>
只是编译而不是预编译。不确定有什么区别。所以建议使用上述工具之一。
EDIT2
我的主要 MVC 项目 dll 的大小为 890k-ish。这个大吗?大小会导致更多的内存丢失吗?
【问题讨论】:
标签: asp.net-mvc azure