在功能、性能等方面为 Azure Web App 选择 dnx451 和 dnxcore 50

Choosing between dnx451 and dnxcore 50 for Azure Web App in terms of functionality, performance, etc

我正在创建一个新项目,它将 运行 在新的 ASP.NET 5 上的 Azure Web App 中。我们不打算 运行 它在 linux 或者诸如此类的事情,至少现在是这样。所以问题是,我应该尽可能保留这两个框架以防万一,还是我应该选择其中一个。有例如我可以与 dnxcore50 一起使用的依赖性要少得多,这不是很好。所以主要问题是:如果 运行 在 Azure Web 应用程序中使用 dnxcore50 是否有任何好处,例如:性能、稳定性等优于 dnx451。

到目前为止确实没有什么大的优势。

这在未来可能会改变,以及为什么我计划同时针对(CoreCLR 和 .NET 4.6)。在 CoreCLR 以及 Docker 和 Service Fabric 上投入了大量资金。

只是我的 2 美分。

我必须开始,我仍然是 ASP.NET 5 中的初学者(和大多数其他人一样),所以我之前没有 post 编辑我的答案,你应该忽略我的声誉, 因为它来自另一个我更了解的主题。

我认为每个切换到 ASP.NET 5 的人都会问同样的问题,在他的项目中保留这两个框架是否有意义。我尝试 post 下面 我个人 关于这个主题的想法。

我个人的选择是我给你的简短建议:保留这两个框架,直到你找到一些真正重要的理由从那里放弃一个

ASP.NET 5 还不是最终的。该策略不是完全固定的,可以在短时间内更改。只是一些例子。以前的测试版支持 "Helios" 作为在 IIS 上托管 ASP.NET 5 个应用程序的选项。该选项后来被删除(参见 the statement). Even the name dnxcore50 is renamed now to dotnet5.4 at least in all internal Microsoft components (see the announcement)。可以假设将来可能会改变其他一些事情。因此,我认为现在将所有鸡蛋放在一个篮子里太危险了:保留两个框架可以降低风险

接下来我发现的是以下内容。 dnxcore50dotnet5.4 或 CoreFX 或 .NET Core 基础库)不支持 .Net Framework 支持的许多功能。对我来说一个重要的例子是缺少 XSD 模式验证(参见 here and here)。我仅将 XML 与 XSD 架构验证结合使用。在大多数其他情况下,我更喜欢 JSON。在您的项目中跳过这两个框架 可以帮助您找到您的代码部分,这些部分可能尚未在 CoreFX 中实现。它可以帮助您将代码移动到单独的组件中或更改实现。

关于性能。人们应该将这两种框架的潜力与当前的实施区分开来。总的来说,CoreFX 被重新设计和分解。一个 mscorlib 的许多部分被分离或删除(远程处理、AppDomains 等)。这意味着CoreFX的性能应该更好。理论上 分解 API 可以提供更好的性能 。此外,可以更轻松地改进 CoreFX 的一部分并发布具有改进性能的新版本。更多的模块而不是一个整体为我们提供了 改进性能和修复错误的新方法 。另一方面,将依赖项替换为新版本可能是新兼容性问题的根源,因此会增加风险并降低稳定性。通过保留两个框架,我们可以测试替代框架中是否存在新问题。它允许我们假设依赖项的最后一次更改而不是我们主代码的最后一次更改是新问题的根源。

我可以继续讨论每个框架使用的优缺点,但是 nodoby 喜欢阅读长文本,我所有的论点都让我做出了相同的实际决定:默认情况下保留两个框架我一发现真正需要从框架中删除一个项目就立即开始我的项目。