don*_*son 6 c# iis asp.net-mvc compilation
我有一个 ASP.NET MVC 网站,我已经验证它在每次第一次点击新的 C# 文件(如控制器)时都在编译。我查看了任务管理器,每次第一次点击新控制器时,页面都很慢,由于编译器,CPU 达到峰值。
我之前使用过 Rosyln 编译器,但我没有做任何更改就切换回了常规的 C# 编译器。
我尝试过预编译,但是当我将我的网站复制到网络托管计算机时似乎并不重要。
我不记得在我使用过的以前版本的应用程序中发生过这种情况,但其中大部分主要是 ASP.NET 表单与 MVC 的混合。
这是正常行为还是我可以通过设置来纠正?我希望它在首次部署站点时编译所有文件。(实际上,第一页太长了,我不确定它是如何不这样做的)
现在,我有一个脚本,可以在我部署应用程序后访问每个控制器,从而避免出现问题。
要复制,只需将一个新的主 dll 复制到您的 bin 文件夹中。然后在您浏览具有不同控制器的不同页面时查看您的任务管理器。
您可以使用缓存来改善您的应用程序首选项。请阅读这篇文章。
您还可以涉及应用程序初始化和 IIS 始终运行。因此,您需要将startMode应用程序池设置为始终运行,这将防止您的应用程序池在一段时间后休眠。
欲了解更多信息,请阅读以下帖子:
使用 iis-application-initialization-for-keeping-aspnet-apps-alive
您始终可以固定您的应用程序以保持活动状态(N:B:-如果您在云中运行,这不是一个好主意。但在共享托管或专用服务器中工作正常(经过测试))。
例子:
public class RecycleConfig
{
public static void PingSite()
{
using (var refresh = new WebClient())
{
try
{
refresh.DownloadString("http://yoursote.com");
}
catch (Exception)
{
}
}
}
public static void SetupRefreshJob()
{
if (HttpContext.Current == null) return;
//remove a previous job
Action remove = HttpContext.Current.Cache["Refresh"] as Action;
if (remove is Action)
{
HttpContext.Current.Cache.Remove("Refresh");
remove.EndInvoke(null);
}
//get the worker
Action work = () =>
{
while (true)
{
Thread.Sleep(600000);
PingSite();
}
};
work.BeginInvoke(null, null);
//add this job to the cache
HttpContext.Current.Cache.Add("Refresh",
work,
null,
Cache.NoAbsoluteExpiration,
Cache.NoSlidingExpiration,
CacheItemPriority.Normal,
(s, o, r) => { SetupRefreshJob(); }
);
}
}
Run Code Online (Sandbox Code Playgroud)
添加Global.asax——
protected void Application_Start()
{
RecycleConfig.SetupRefreshJob();
/........
/........
}
protected void Application_End(object sender, EventArgs e)
{
RecycleConfig.PingSite();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |