ASP.NET 5 针对 dnx451/dnx46 性能

标签 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) 上运行的应用程序有什么区别?后者相对于另一个有哪些改进?

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

最佳答案

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(又名“完整框架”版本)。对于 Kestrel(ASP.NET 5 的新“通用”Web 服务器)来说尤其如此,其中巨大的 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?

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

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 社区所做的出色工作,自第一个测试版以来分配(以及因此“每个请求的字节数”)已大幅减少,这对两个版本都有影响。使用 CoreCLR 更有可能有助于减少托管整个应用程序所需的内存(因为您引用了较轻的程序集),但对“每个请求的字节数”的影响应该很难注意到。

当然,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 不再“托管”您的应用程序:它现在仅充当反向代理。一切实际上都在单独的 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 应用程序”将是一件复杂的事情(如果不是不可能的话),特别是如果它依赖于 System.Web 并且不使用抽象层像 OWIN(ASP.NET 5 提供了与 OWIN 的兼容层)。

关于ASP.NET 5 针对 dnx451/dnx46 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274797/

相关文章:

c# - 301 使用 unicode 字符重定向 - C#

javascript - react setState 慢

mysql - 如何使用多台机器扩展 MySQL?

MySQL InnoDB 大表的 INSERT 性能

c# - MailTo: 添加 Html 标签

c# - Javascript 确认对话框 - 防止事件处理程序触发?

c# - 如何使用 C# 从 ASP.Net 中的数据库中获取最新记录?

c# - 无法打开下载保存对话框

不带 <?xml> 文本声明的 .NET XML 序列化

.NET 日期到字符串在 Vista 伪文化中给出无效字符串