zoukankan      html  css  js  c++  java
  • .NET 4.5 基类库中的新增功能

     

    1. 简化的异步编程

    C#和VB都支持了新的async & await语法以简化异步编程,.Net Framework中也相应增加了相关的函数以辅助。一个比较醒目的变化就是在IO操作中多了许多XXXAsync的函数,另外,线程操作的Task类中也新增了不少静态函数。

     

    2. 只读集合接口

    长期以来,BCL中提供的只读集合只有IEnumerable<T>它主要存在如下问题:

    • 每次访问都需要迭代,如果多次访问则导致性能较差。
    • 不支持统计元素个数
    • 不支持随机访问或查询访问

    由于C#不像C++那样能返回const只读对象,如果直接返回List或Dictionary引用的话又有集合被调用方修改的风险,有的时候,为了防止集合被修改,我们甚至通过ToArray这种比较低效的方法返回一个副本。

    .Net 4.5中增加了IReadOnlyList<T>IReadOnlyDictionary<TKey, TValue>两个只读集合接口(它们有公共的父接口IReadOnlyCollection),它们是支持协变的,这样我们返回集合的时候就可以直接返回只读集合了。

     

    3. zip存档支持

    .Net 4.5中增加了ZipArchive类实现对Zip文件的管理,由于考虑到了Metro程序不支持文件系统,它的功能被拆分到了两个Dll。

    • System.IO.Compression.dll 此程序集包含通用 .zip 功能, 它不支持文件路径。 此程序集中的主类是 ZipArchive。
    • System.IO.Compression.FileSystem.dl 此程序集提供 ZipFile 静态类以定义扩展方法和静态帮助程序。

    PS:个人感觉这个设计比较蛋疼,用个Zip还需要引用两个Dll,完全可以合并成一个或全部塞到mscrolib里面去,对于Metro程序直接把不支持的给裁剪了即可。另外,这个库不支持带密码的zip文件,不知道设计者是怎么想的。

     

    4. HttpClient

    .Net 4.5中新增了一个HttpClient类专门用于Http操作,十分小巧好用,我以前写过一篇文章介绍他-- .Net 4.5中的HttpClient试用,这里就不多说了。

     

    5. WebSocket

    .Net 4.5中,在System.Web.WebSockets和System.Net.WebSocket名字空间实现了对WebSocket的支持,其中前者主要用于Asp.net框架。通过它可以快速建立自己的webSocket服务,我在文章HTML5中的WebSocket中也介绍过。不过它不支持win7,只能在win8上工作,这个限制使得它的工作范围变得有限了不少。

     

    6. WeakReference<T>

    新提供的泛型WeakReference<T>解决了以前的WeakReference存在的两个问题:1. 需要类型转换,2. 不可靠的IsAlive属性(WeakReference<T>就把它给直接去掉了)。有了WeakReference<T>后,老版本的WeakReference该下岗了。

     

    7. ArraySegment<T>

    这个类本身在.Net 2.0中就已经有了,主要用于提供一个数组的子集,而无需复制副本。但它之前没有什么接口方法,导致只能遍历,限制太大。现在实现了IList接口,用起来方便多了。

     

    8. Comparer<T>.Create

    到了.Net 4.5,我们终于可以通过一个lambda表达式构造一个IComparer<T>对象了,一直以为这个应该是在.Net 2.0时代就应该提供的功能。

     

    9. SemaphoreSlim.WaitAsync

    这个是系统内置的唯一一个异步锁,如果觉得不够用,请参看我以前的文章--基于TPL异步编程的同步和互斥的类库

     

    10. StreamReader、StreamWriter等不释放基础流的选项

    BinaryReader、BinaryWriter、StreamReader、StreamWriter等流读写类的构造函数中增加了leaveOpen参数,以控制它们放弃对基础流的托管。也就是说,在StreamReader关闭的时候,可以选择不关闭其基础流。

     

    11. Regex.Timeout

    正则表达式终于支持超时了,虽然用到的地方感觉不是很多,但还是比较有用的。

     

    12. CancellationTokenSource支持超时自动取消

    不多介绍了,请参考我以前的文章-- .Net 4.5中通过CancellationTokenSource实现对超时任务的取消

    其他两个非BCL中的类库

    1. TPL Dataflow (TDF)

    TPL Dataflow是微软面向高并发应用而推出的新程序库,很好很强大,不知道为什么微软没有把它合并到BCL中,而是单独做一个库发行,可以通过NUGET或在TDF的官网下载。这个库接口不多,但非常好用,有空的话我专门写几篇文章来描述一下他,不过目前对它的资料不是很多,有的细节还是了解的不清楚。

     

    2. Roslyn

    编译器即服务(Compiler as a Service)是C# 5.0的核心功能之一,我以前在文章通过Roslyn构建自己的C#脚本介绍过它的部分功能。不过Roslyn的开发进度好像赶不上VisualStudio的发布,目前还是CTP版本(Anders大牛忙着搞TypeScript去了? O(∩_∩)O~),不过实现的功能已经比较全了,想尝鲜的朋友可以在微软的网站或NUGET上下载。

     

    参考文章:http://msdn.microsoft.com/zh-cn/magazine/jj133817.aspx

  • 相关阅读:
    【转】【C++】【MFC】各种数据类型大小
    【转】【C++】【MFC】关于RADIO BUTTON的使用方法
    【C++】【MFC】创建新的线程函数
    【C++】【MFC】定义全局变量的方法
    【Quartus错误】Internal Error: Sub-system: AMERGE
    【转/TCP协议编程】 基于TCP的Socket 编程
    SQL递归查询(with as)
    SQL查询月、天、周、年(MySql的实例对比)
    sql 基础语句
    经典SQL语句大全
  • 原文地址:https://www.cnblogs.com/TianFang/p/2770546.html
Copyright © 2011-2022 走看看