怎么做旅游网站,网站如何做美工,搜狐快站,鞍山58同城网微软宣布改进了.NET Core运行时和基础类库的性能。虽然没有像改进ASP.NET Core的性能那样大肆宣传#xff0c;但这些改进同样重要。
其中#xff0c;以下10个方面的变化比较显著#xff1a;集合、LINQ、压缩、加密、数学运算、序列化、文本处理、文件I/O、网络和并发。至于…微软宣布改进了.NET Core运行时和基础类库的性能。虽然没有像改进ASP.NET Core的性能那样大肆宣传但这些改进同样重要。
其中以下10个方面的变化比较显著集合、LINQ、压缩、加密、数学运算、序列化、文本处理、文件I/O、网络和并发。至于任何一组性能变化如何影响具体的应用程序则取决于具体的使用模式。下面的讨论只列出了一些要点让你对这些改进有一个大概的了解。其中有许多变化是基于开源Pull Request请求。这样一些对于微软而言因为总体影响极小而不值得实现的重要修改就可以实现了。而这些修改对于很大一部分开发人员而言相当重要。
集合几乎在任何应用程序中都有广泛的应用。许多操作都通过简化集合或降低复杂度得到了改进。其中有些改进得益于减少开销如简化操作实现更好的内联或者减少指令数量。SortedSet的构造函数得到了修复因为最初该构造函数采用了一种简单的方式编写在处理重复时可扩展性不是很好。SortedSet的Min和 Max不需要遍历整棵树。List.Add的速度更快了。不只是System.Collections.Generic得到了改进其他命名空间如System.Collections.Concurrent也得到了改进。 ConcurrentQueue和ConcurrentBag基本上重写了。LINQ用户应用仅从集合的改进就可以感受到性能的提升了。
此外LINQ本身的性能也是一个改进方面。为了减少内存分配的数量和大小以及简化算法.NET Core的许多操作符都重写了。例如Enumerable.Concat可以确保串联多个Enumerable时线性增长而不是指数增长。ToList和Select操作符经过了简化减少了内存分配和委托及接口的使用同时将字段读写最小化避免了复制。Enumerable.ToArray现在对内部缓冲区的管理也更好了。
与集合和LINQ操作内存不同压缩通常是受CPU限制。例如DeflateStream现在使用了一个原生解压库。该原生解压库也经过了优化。
在加密方面SHA256.Create使用了一种原生实现如Windows上的CNG或Unix上的OpenSSL。
数学运算操作在操作BigInteger时的性能得到了提升。
二进制序列化是CPU、数据和内存密集型的。.NET Core 2.0增加了BinaryFormatter并允许O(N)算法在切换到O(N2)算法之前使用更长的时间。现在较大的序列化输入可以更快地处理了。
对于文本处理Regex.IsMatch在内存分配方面更高效了而且由于数据缓存方式的变化垃圾收集也更高效了。WebUtility.UrlDecode不再对输入做实际上并不需要的解码了。微软针对一些内置的Encoding派生类型进行了循环优化。
微软对字符串操作也做了许多改进。Enum.Parse在内存使用方面更高效了所以垃圾收集也更高效了。各种ToString方法也经过了改进。String类本身的方法也经过了改进如IndexOf和StartsWith。考虑到字符串在应用程序中使用比较多这样的改进应该会产生巨大的影响。
文件I/O经过了改进。使用异步读写的FileStreams现在效率更高了。
底层网络协议栈经过了改进。异步套接字现在允许此类操作实际上同步完成从而避免异步完成的开销。这些类型的变化对于使用套接字原语的上层函数有很大的影响。与上层网络类如NetworkStream和 SslStream相关的工作也是一个改进的来源。
对并发与并行的修改工作已经开展。许多.NET应用程序使用ThreadPool类。例如QueueUserWorkItem使用一个同步控制和内存分配更少的队列取代了全局队列大大减少了垃圾收集工作。对于类似SpinLock这样的同步原语相关的改进工作一直在进行。SpinLock.TryEnter经过了改进当无法立即获得锁时它会更快地失败。对于使用这个类的热门执行路径这项改进带来了巨大的性能提升。
在这一轮的性能改进工作中有大约1000个Pull Request被合并进来而需要完成的工作还有许多。总之在增加基于性能的API及改进现有库方面性能提升有更高的优先级。
BenchmarkDotNet对这些修改做了一些独立的测试。
原文地址http://www.infoq.com/cn/news/2017/06/NETCore-Runtime-Base-Class-Perf.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注