ASP.NET 5 个定位 dnx451/dnx46 效果

ASP.NET 5 targeting dnx451/dnx46 Performance

使用 ASP.NET 5 假设所有内容都是基于选择加入的,应用程序仅加载选择的库,这太棒了。较旧的 ASP.NET 功能封装在 System.Web 命名空间中,其中包含构建 ASP.NET 应用程序可能需要的一切。将所有这些未使用的库填充到内存中会产生实际成本,因此 ASP.NET 5 方法是选择您需要的内容,而不是拖延大量未使用代码的库。

我的问题:

  1. 这种选择加入的方法和性能改进是否仅适用于 ASP.NET 5 目标 .NET CORE?还是 ASP.NET 5 针对 Windows 上的完整框架获得所有这些不错的功能?

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

  3. ASP.NET 5 据推测每个请求占用大约 2kb 内存,而旧版本 ASP.NET 每个请求占用 30kb。这种巨大的性能增强是否只有在以 dnxcore50 为目标时才有可能?还是 dnx451/dnx46?

  4. 也是这种情况
  5. 在IIS 7.5+上运行ASP.NET5 dnx46时,System.web还没有加载吗? (不确定,但我认为 IIS 和 System.web 是集成的,如果我错了请纠正我)。

  6. 最后,ASP.NET 4.6 应用程序和 ASP.NET 5 (dnx46) 上的应用程序 运行 有什么区别?后者比另一个有哪些改进?

谁能帮我解释一下?我似乎找不到这些问题的明确答案。

Is this opt in approach and performance improvements only available for ASP.NET 5 targeting .NET CORE? or does ASP.NET 5 targeting the full framework on Windows get all these nice features?

不,ASP.NET 5 提供的大部分改进也适用于 DNX451(又名 "full framework" 版本)。对于 Kestrel(ASP.NET 5 的新 "universal" 网络服务器)尤其如此,其中大量的 RPS 改进影响了两个版本。

When targeting dnx451 or dnx46, are they still dependent on System.web and are all unused libraries still loaded into memory like older versions of ASP.NET?

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

ASP.NET 5 supposedly takes around 2kb memory per request while older version of ASP.NET took up to 30kb per request. Is this great performance enhancement only possible when targeting dnxcore50? or is this the case also for dnx451/dnx46?

感谢社区在 Kestrel 中所做的出色工作,分配(因此,"bytes per request")自第一个测试版以来已大幅减少,这影响了两个版本。使用 CoreCLR 更有可能有助于减少托管整个应用程序所需的内存(因为您引用了更轻的程序集),但对 "bytes per request" 的影响应该很难察觉。

当然,CoreCLR 的影响将主要取决于您在项目中有多少引用:尽管在大多数情况下,内存增益实际上应该是微不足道的(您有更轻的程序集,但由于 CoreCLR 的完全模块化性质, 他们的数量要多得多)。

When running ASP.NET 5 dnx46 on IIS 7.5+, is System.web still not loaded? (Not sure, but I think IIS and System.web are integrated, correct me if I am wrong).

不,多亏了新的托管层(IIS 之前的集成 Helios,用于加载 System.Web,但 HttpPlatformHandler 不再如此)。请注意,IIS 不再 "hosts" 您的应用程序:它现在仅充当反向代理。一切实际上都在一个单独的 DNX 工作进程中处理,由 IIS 启动和监视。

Lastly, what is the difference between an ASP.NET 4.6 app and an app running on ASP.NET 5 (dnx46)? what improvements does the latter hold over the other?

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