ASP.NET 5针对dnx451 / dnx46性能

时间:2015-12-14 19:12:26

标签: asp.net .net performance asp.net-core .net-core

使用ASP.NET 5,一切都被认为是基于选择,应用程序只加载选择的库,这是惊人的。较旧的ASP.NET功能封装在System.Web命名空间中,该命名空间具有构建ASP.NET应用程序所需的一切。将所有未使用的库填充到内存中是一个真正的成本,因此ASP.NET 5的方法是选择您需要的内容而不是使用未使用代码的大型库。

我的问题:

  1. 这种选择性方法和性能改进是否仅适用于面向.NET CORE的ASP.NET 5?或者,针对Windows上的完整框架的ASP.NET 5是否获得了所有这些不错的功能?

  2. 当定位dnx451或dnx46时,它们是否依赖于System.web并且所有未使用的库仍然像旧版本的ASP.NET一样加载到内存中?

  3. ASP.NET 5据称每个请求大约需要2kb内存,而旧版本的ASP.NET每个请求占用30kb。只有在针对dnxcore50时才能实现这种出色的性能提升吗?或者这也是dnx451 / dnx46的情况?

  4. 在IIS 7.5+上运行ASP.NET 5 dnx46时,System.web是否仍未加载? (不确定,但我认为IIS和System.web是集成的,如果我错了,请纠正我。)

  5. 最后,ASP.NET 4.6应用程序和在ASP.NET 5上运行的应用程序(dnx46)之间有什么区别?后者对另一方有什么改进?

  6. 有人请为我澄清一下吗?我似乎无法找到这些问题的明确答案。

1 个答案:

答案 0 :(得分:6)

  

此选择方法和性能改进是否仅适用于面向.NET CORE的ASP.NET 5?或者,针对Windows上的完整框架的ASP.NET 5是否获得了所有这些不错的功能?

不,ASP.NET 5提供的大部分改进也适用于DNX451(又称“完整框架”版本)。 Kestrel(用于ASP.NET 5的新“通用”Web服务器)尤其如此,其中大量RPS改进对两个版本都有影响。

  

当定位dnx451或dnx46时,它们是否依赖于System.web并且所有未使用的库仍然像旧版本的ASP.NET一样加载到内存中?

没有。使用新的托管层,即使使用IIS,也永远不会加载System.Web

  

ASP.NET 5据称每个请求大约需要2kb内存,而旧版本的ASP.NET每个请求占用30kb。只有在针对dnxcore50时才能实现这种出色的性能提升吗?或者这也是dnx451 / dnx46的情况?

由于社区在Kestrel所做的出色工作,自第一次测试以来,分配(以及“每个请求的字节数”)大幅减少,这对两个版本都有影响。使用CoreCLR更有可能帮助减少托管整个应用程序所需的内存(因为你引用了较轻的程序集),但是对“每个请求的字节数”的影响应该是难以察觉的。

当然,CoreCLR的影响主要取决于你的项目中有多少引用:在大多数情况下,内存增益应该是微不足道的(你有更轻的组件,但由于CoreCLR的完全模块化特性,它们更多的是。)

  

在IIS 7.5+上运行ASP.NET 5 dnx46时,System.web是否仍未加载? (不确定,但我认为IIS和System.web是集成的,如果我错了,请纠正我。)

不,感谢新的托管层(IIS以前的集成,Helios,用于加载System.Web,但HttpPlatformHandler不再适用)。请注意,IIS不再“托管”您的应用程序:它现在只是充当反向代理。一切都在一个单独的DNX工作进程中处理,由IIS启动和监视。

  

最后,ASP.NET 4.6应用程序和在ASP.NET 5上运行的应用程序(dnx46)之间有什么区别?后者对另一方有什么改进?

在新堆栈上托管“ASP.NET 4.6应用程序”将是一件复杂的事情(如果不是不可能的话),特别是如果它依赖于System.Web并且不使用像OWIN这样的抽象层(ASP。 NET 5提供了与OWIN的兼容层。