Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP MVC 4.x+:每次重新编译项目-如何修复?_C#_Asp.net Mvc 4_Razor_Iis 7.5 - Fatal编程技术网

C# ASP MVC 4.x+:每次重新编译项目-如何修复?

C# ASP MVC 4.x+:每次重新编译项目-如何修复?,c#,asp.net-mvc-4,razor,iis-7.5,C#,Asp.net Mvc 4,Razor,Iis 7.5,我们有一个转换为ASP MVC的解决方案,它正在变得越来越大 现在的问题是: 应用程序的启动大约需要15秒以上的时间,因为应用程序需要预缓存数据库中的大量内容 现在,在ASP MVC中,问题是,每次我们更改控制器中的某些内容时,整个应用程序都会关闭并重新启动,global.asax中的所有内容都会再次执行,就好像该应用程序来自冷启动一样 想象一下:您编写了一个简单的if条件,但意外地输入了错误的参数->您必须纠正if条件。 ->整个应用程序已重新启动 所以,即使是很小的事情,我们每次都要等待15

我们有一个转换为ASP MVC的解决方案,它正在变得越来越大

现在的问题是: 应用程序的启动大约需要15秒以上的时间,因为应用程序需要预缓存数据库中的大量内容

现在,在ASP MVC中,问题是,每次我们更改控制器中的某些内容时,整个应用程序都会关闭并重新启动,global.asax中的所有内容都会再次执行,就好像该应用程序来自冷启动一样

想象一下:您编写了一个简单的if条件,但意外地输入了错误的参数->您必须纠正if条件。 ->整个应用程序已重新启动

所以,即使是很小的事情,我们每次都要等待15秒以上

在旧的ASP.NET中,您将大部分代码放在.aspx文件中,这些文件刚刚被重新解释,但整个应用程序并没有关闭等等

这有什么办法吗? 让我们称它为解释型控制器而不是编译型控制器

这种ASP MVC的行为让人非常恼火,当前的解决方法是将尽可能多的内容放入视图中,这是一种糟糕的做法-但是,这对我们很有帮助,因为我们不必等待15秒以上,直到重新编译控制器并重新启动应用程序

有什么想法吗

问候

因为应用程序需要预缓存数据库中的大量内容

对我来说,这就是问题所在。不是事情本身,这是很正常的,但事实上,你没有短路任何东西,例如转储缓存数据到存储或。。。出于开发目的,文件系统。我将向您介绍在本地调试时发生的一些小秘密:

基本上,它是在欺骗:只有在开发过程中,为了避免运行任何昂贵的操作,在启动过程中,它首先检查本地磁盘上具有正确名称的文件,并从那里而不是从数据库中获取所需的关键数据;如果必须访问数据库,它将存储随后获取的数据。显然,使用某种机制来刷新文件和内存存储,以便在需要时获取实际数据


这不是一根魔杖,但它有帮助。显然,要做的另一件事是加快初始加载时间。如果在你的情况下这是不可能的,我会感到惊讶。

几周前,我参加了微软的一个活动,焦点是ASP vNext

我们还讨论了这种行为:它实际上是在vNext之前的ASP/MVC版本中设计的

在下一版本ASP vNext中,您可以动态更改控制器代码,而无需重新编译整个项目,从而防止关闭整个Web服务器进程


好消息——至少在未来是这样-

单元测试是你的朋友。MVC的一个巨大好处是易于进行单元测试。您可以为控制器的功能编写一系列测试,然后更改条件并重新运行测试。该测试不会加载整个应用程序域、db缓存或网站上下文,因此速度更快,而且在手动测试之前,您还可以从测试代码中获得额外的好处。你考虑过使用这种方法吗?实现已知的错误实践来克服性能问题是有问题的。我做了一些研究和分析:最慢的部分之一是建立DB连接并执行第一个调用。第一个调用不会预热缓存,它只加载大约10行简单的配置数据。好,完成。这将启动时间缩短约5秒,另一个10秒。仍然存在,显然是ASP MVC的一个问题:-