最专业的手机网站制作,sae wordpress 安装主题,网站被跳转怎么办,上海网站建设免相关知识请参考.netCore开发团队博客 https://blogs.msdn.microsoft.com/dotnet/ Bing.com是一种云服务#xff0c;运行在遍布全球许多数据中心的数千台服务器上。Bing服务器每秒处理来自全球消费者的数千个用户查询#xff0c;通过他们的浏览器#xff0c;使用Microsoft认… 相关知识请参考.netCore开发团队博客 https://blogs.msdn.microsoft.com/dotnet/ Bing.com是一种云服务运行在遍布全球许多数据中心的数千台服务器上。Bing服务器每秒处理来自全球消费者的数千个用户查询通过他们的浏览器使用Microsoft认知服务API的合作伙伴以及个人数字助理Cortana进行搜索。我们的用户要求这些结果具有相关性和速度因此性能和可靠性是运行Bing等成功云服务的关键组件。Bing的前端堆栈主要是以MVC模式分层的托管代码编写的。大多数业务逻辑代码都是用C编写的数据模型视图逻辑是用Razor编写的。该层负责将搜索结果数据编码为Microsoft Bond转换为HTML然后将其压缩并发送到浏览器。作为Bing的前端平台的守门人我们将开发人员的工作效率和功能敏捷性视为我们成功定义中的附加关键组件。数以百计的开发人员依靠这个平台将他们的功能投入生产他们希望它能像钟表一样运行。从一开始Bing.com就在.NET Framework上运行但它最近已转换为在.NET Core上运行。推动Bing.com采用.NET Core的主要原因是性能即服务延迟支持并行和应用程序本地安装与机器范围的安装或缺少安装和ReadyToRun映像无关。为了实现这些改进我们开始努力使代码在.NET实现中可移植而不是依赖于仅在Windows上可用且仅与.NET Framework一起使用的库。团队开始使用.NET Standard 1.x但是减少的API表面为我们的代码迁移带来了非常重要的复杂性。使用.NET Standard 2.0返回的20,000多个API一切都改变了我们能够迅速从代码修改转移到测试。在压缩了一些bug后我们准备将.NET Core部署到生产环境中。ReadyToRun图像托管应用程序通常可能具有较差的启动性能因为首先必须将JIT编译为机器代码。.NET Framework具有预编译技术NGEN。但是NGEN需要在将执行代码的计算机上执行预编译步骤。对于Bing来说这意味着NGENing成千上万的机器。随着应用程序在Web服务机器上进行预编译这与积极的部署周期相结合将导致显着的服务容量减少。此外运行NGEN需要管理权限这些权限在数据中心设置中通常不可用或经过严格审查。在.NET Core上crossgen 工具允许将代码预编译为预部署步骤例如在构建实验室中并且部署到生产的映像已准备好运行性能.NET Core 2.1几乎在运行时和库的所有领域都进行了重大的性能改进; 博客上一篇文章中提供了一篇很好的论文。我们的生产数据与.NET Core 2.1中的显着性能改进与.NET Core 2.0和.NET Framework 4.7.2相比产生了共鸣。下图跟踪了过去几个月内部服务器的延迟情况。Y轴是延迟省略实际值最后的急剧下降6月2日是.NET Core 2.1的部署这一切都提高了34这要归功于.NET社区的辛勤工作.NET Core 2.1中的以下更改是我们工作负载的显着改进的亮点。它们以降低的影响顺序呈现。矢量化string.Equalsjkotas和string.IndexOf/LastIndexOfeerhardt无论您采用哪种方式切片HTML渲染和操作都是字符串繁重的工作负载。字符串比较和索引操作是其中的主要组成部分。这些操作的矢量化是我们测量的性能改进的最大贡献者。EqualityComparerT.DefaultAndyAyersMS的虚拟化支持我们的主要软件组件之一是重度用户Dictionaryint/long, V间接受益于JIT中为了DictionaryK, V优化而进行的内在识别工作benaadams软件写入监视并发GC Maoni0和kouvel这导致我们的应用程序中CPU使用率降低。在.NET Core 2.1之前Windows x64以及.NET Framework上的写入监视是使用具有不同性能权衡的Windows API实现的。这个新实现依赖于JIT写屏障它直观地增加了参考商店的成本但是这个成本是摊销的而且在我们的工作量中没有注意到。此改进现在也可以通过2018年5月的安全性和质量汇总在.NET Framework上获得使用calli的方法现在可以内联AndyAyersMS和mjsabby我们在代码的性能关键部分中使用ldftn calli代替委托这会产生对象分配其中需要间接调用托管方法。此更改允许具有calli指令的方法体具有内联条件。我们的依赖注入框架生成这样的方法提高string.IndexOfAny的23 char搜索性能bbowyersmyth前端堆栈中的常见操作是在字符串中搜索“”“/”“/”以分隔URL的各个部分。这种特殊的外壳改进在整个代码库中都是有益的。除了运行时更改之外.NET Core 2.1还为.NET库生态系统带来了Brotli支持。Bing.com使用此功能动态压缩内容并将其提供给支持的浏览器。运行时敏捷最后在我们的应用程序中拥有运行时的xcopy版本的能力意味着我们能够以更快的速度采用更新版本的运行时。事实上如果您查看上面的图表我们将在6月2日即发布后的两天的常规应用程序部署中全球范围内进行.NET Core 2.1更新这是可能的因为我们在.NET Core的每日CI构建测试功能和性能的整个版本中运行我们的持续集成CI管道。我们对未来感到兴奋并与.NET团队密切合作帮助他们确定未来的更新资格.NET Core团队很兴奋因为我们提供了大量的功能测试和额外的大型代码库来衡量实际的性能改进以及我们致力于为Bing.com用户提供快速结果以及我们自己的开发人员使用最新的软件和工具。原文地址: https://www.cnblogs.com/fancunwei/p/9509830.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com