`
从此醉
  • 浏览: 1072465 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

.NET Framework 4.5 五个很棒的特性

 
阅读更多

.NET 4.5发布已经过了差不多1年了。但是随着最近微软大多数的发布,与.NET开发者交流的问题显示,开发者仅知道一到两个特性,其他的特性仅仅停留在MSDN并以简单的文档形式存在着。

比如说,当你问一个.NET开发者.NET框架内核中有什么新东西的时候,他们中的大多数仅仅会说异步与等待(至少和我交谈的人们仅仅谈到了这些特性)。

另外也很难贯通所有的新特性。因为这些特性可能对于你目前正在开发的工作并不如听上去那么有趣。

所以在这篇文章中我想提及我喜欢的5个在.NET4.5内核中的特性。当然,这可能只是我喜欢的而并不是你的。但是我所做的是当我选择这些特性时我也想着较大的.NET社区,我希望我满足了这种期望。

aehtrhthjtyj

提示:这篇文章没有讨论在ASP.NET, WCF, WPF, WWF等中的新特性。仅仅讲了关于内核的新特性。

 特性1:异步与等待(代码开发者)

这个特性已经被吹嘘过度并且每个.NET布道者都谈论它。但是这仍然是我喜欢的并且你会知道为什么从这里只有几行。

atrhrtjrt2

异步和等待是标记,它们标记当任务(线程)结束时控制应该恢复到代码的位置。

让我们尝试通过下面的代码来搞清上面声明的含义。如果你明白下面代码的流程:

  1. Static void main()从开始处调用Method()方法。
  2.  Method()方法产生一个名为LongTask的任务(线程),线程将等待10秒。
  3.  同时,在调用了任务之后,控制又回到Method()方法继续执行剩下的代码。换句话说,正如调用时多线程的(Task.Run…),LongTask仍在运行。例如,等待10秒并且Method()方法剩下的代码也在执行。

现在在相同的情景下,我们想要第3步执行得不一样。我们想要在LongTask()执行完成后,控制应该回到Method方法执行接下来的代码。“异步”和“等待”关键字能够帮助实现上面的功能。

agfhgfnhgm3

这里有三个关于关键字“异步”和“等待”的重点需要记住:

  1. 异步和等待是一对关键字。你不能独立使用它们。
  2. 异步应用于方法。这个关键字是一个标志,是说该方法会有一个等待关键字。
  3. 等待关键字标记了任务恢复执行的位置。所以你总是发现这个关键字与Task关联。

下面是前面讨论的代码的修订版本,这里我们应用了异步与等待。所有其他的步骤仍然如前所述,但是“步骤3”将在“步骤2”完成之后执行。简单来说就是控制在任务完成之后回到Method()方法。

arhtrh4

现在你已经阅读了“异步”与“等待”的内容,让我来提个问题。上面的代码同样也能通过Task.Wait或者Task.ContinueWith实现,那么它们有什么不同?我把这个问题留作给你的家庭作业。

 

特性2:便利Zip压缩(Zip压缩)

sawfwsfa5

Zip是最为人所接受的文件格式之一。Zip格式以某些内置的名字被几乎所有操作系统支持。

  • 在Windows操作系统中,它以“压缩文件”的名称实现。
  • 在MAC操作系统中,它以“文档实用程序”的名称实现。

现在在.NET中我们对执行Zip压缩没有内置的支持。许多开发者实用第三方组件如“DotnetZip”。在.NET4.5中,Zip属性内置于框架本身,以System.IO.Compression的命名空间内置。

第一步你需要引用两个命名空间:

  • System.IO.Compression.FileSystem
  • System.IO.Compression

接下来引用如下两个命名空间:

  1. using System.IO.Compression; 

如果你想要从文件夹压缩文件你可以调用如下所示的CreateFromDirectory函数。

  1. ZipFile.CreateFromDirectory(@"D:\data",@"D:\data.zip"); 

如果你想要解压,你可以调用如下代码所示的ExtractToDirectory函数。

  1. ZipFile.ExtractToDirectory(@"D:\data.zip", @"D:\data\unzip"); 

特性3:正则表达式超时(超时)

ewfjdnvlgdklgv

“正则表达式”一直是做验证首选的方式。如果你是正则表达式的新手,请看正则表达式,我解释了正则表达式是如何执行的。但是正因为正则表达式的典型逻辑解析使得它暴露于DOS攻击下。让我们试着理解刚才我说的。

作为例子请考虑这样的正则表达式-“^(\d+)$”。这个正则表达式表明只能有数字。你也可以看正则表达式符号图,它标明了这个正则表达式会如何求值。现在让我们假设要验证“123456X”。这将有6条路径如下图所示。

afnhjgfnhgm7

但如果我们再多加一个数字进去,将会有7条路径。换句话说,随着字符长度的增加,正则表达式将会花更多时间执行。也就是说,求值时间与字符长度成线性比例。

agnhgm8

 

现在让我们把之前定义的正则式从“^(\d+)$”变为“^(\d+)+$”。如果你看正则表达式符号图它将相当复杂。如果我们现在试着验证“123456X”,将会有32条路径。如果你再增加一个字符,路径数将会增加到64。

asdgvdfbfgn9

句话说,上面的正则表达式中时间开销与字符数目为成倍关系。

adsbfdbfghrt10

现在你可能要问的是,这很重要吗?线性上升的求值时间可以被黑客利用来进行DOS(拒绝服务)攻击。他们可以部署一个长而且是足够长的字符串来使你的应用永远挂起。

对于这个问题合适的解决方法是在正则表达式执行上设置超时时间。好消息是,在.NET4.5中你可以定义一个超时属性如下代码所示。所以如果你收到任何怀有恶意的字符串,应用不会永远在循环中执行。

  1. try 
  2.   var regEx = new Regex(@”^(\d+)+$”, RegexOptions.Singleline, TimeSpan.FromSeconds(2)); 
  3.   var match = regEx.Match(“123453109839109283090492309480329489812093809x”); 
  4. catch (RegexMatchTimeoutException ex) 
  5.   Console.WriteLine(“Regex Timeout”); 

 

特性4:优化配置文件(提升启动性能)

我们都知道.NET代码是半编译的格式。在运行时,JIT(Just-in-Time)编译器执行并且转换这种半编译的IL代码为机器原生代码。对JIT最大的抱怨之一是当.NET应用初次执行的时候,它运行得很慢因为JIT在忙着转换IL代码到机器代码。

为了降低这个启动时间,在.NET4.5中有称为“优化配置文件”的内容。配置文件不过是一个记录了应用在启动运行中需要的方法列表的简单文件。所以当应用开始后,后台的JIT执行并且开始转换这些方法的IL代码为机器/原生语言。

这个后台JIT在多个处理器上编译启动方法从而进一步降低启动时间。另外请注意你需要多核处理器来实现配置文件优化。如果你没有多核处理器那么这个设定会被忽略。

afgngkmyjkytjy12

为了创建“配置文件”这个文件,首先你需要引入System.Runtime命名空间。然后你可以调用静态类ProfileOptimization的SetProfileRoot和StartProfile方法。现在当应用启动后台JIT,它将会读取配置文件并且在后台编译启动方法从而降低启动时间。

  1. using System.Runtime; 
  2.   
  3. // Call the Setprofilerroot and Startprofile method 
  4. ProfileOptimization.SetProfileRoot(@"D:\ProfileFile"); 
  5.   
  6. ProfileOptimization.StartProfile("ProfileFile"); 

重要提示:ASP.NET 4.5Silverlight 5应用默认支持Profileoptimization。所以上述代码在这些技术中无需编写。

特性5:垃圾回收(垃圾后台清理)

afgjrtk5ytjytn13

垃圾回收在.NET应用中是一项真正繁重的任务。当是ASP.NET应用的时候,它变得更繁重。ASP.NET应用在服务器运行,许多客户端向服务器发送请求从而产生对象负荷,使得垃圾回收确实努力清理不需要的对象。

aedvgdbh4erh14

在.NET4.0中,当垃圾回收运行清理的时候,所有的应用程序线程都暂停了。在上图中你可以看到我们有3个应用程序线程在执行。有两个垃圾回收运 行在不同的线程上。一个垃圾回收线程对应一个逻辑处理器。现在应用程序线程运行并执行它们的任务,伴随着这些应用程序线程的执行它们也创建了操作对象。

在某个时间点,后台垃圾回收运行开始清理。当这些垃圾回收开始清理的时候,它们暂停了所有的应用程序线程。这使得服务器/应用程序在那一刻不响应了。

afvfbrtherg15

为了克服上述问题,服务器垃圾回收被引进了。在服务器垃圾回收机制中多创建了一个运行在后台的线程。这个线程在后台运行并持续清理2代对象(关于垃 圾回收0,1和2代的视频)从而降低主垃圾回收线程的开销。由于双垃圾回收线程的执行,主应用程序线程很少被暂停,进而增加了应用程序吞吐量。为了使用服 务器垃圾回收,我们需要使用gcServer XML标签并且将它置为true。

  1. <configuration> 
  2.    <runtime> 
  3.       <gcServer enabled="true"/> 
  4.    </runtime> 
  5. </configuration> 

 

另三个值得探索的特性

设置默认应用程序域的区域性

在上一个版本的.NET中如果我想设置区域性那么我需要在每个线程中设置。下面的示例程序演示了在线程级别设置区域性的痛苦。当我们有大量多线程应用程序的时候这是真正的痛苦。

  1. CultureInfo cul = new CultureInfo(strCulture); 
  2. Thread.CurrentThread.CurrentCulture = cul
  3. Thread.CurrentThread.CurrentUICulture = cul

4.5中我们可以在应用程序域级别设置区域性并且所有在这个应用程序域当中的线程都会继承这个区域性。下面就是如何实现DefaultThreadCurrentCulture的示例代码。

  1. CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
  2.   
  3. CultureInfo.DefaultThreadCurrentCulture = culture

数组支持超过2GB容量

我不确定在什么样的情景下我们会需要2GB的容器。所以我个人并不清楚我们将在哪用到这个特性。如果我曾需要如此之大的容器我会把它分解成小份。但我确信在框架中启用此功能应该有个很好的理由。

控制台支持Unicode编码

我把这个特性留在讨论范围之外是因为非常少的人用控制台程序工作。我曾见过有人把控制台用于学术目的。总而言之,我们现在也对控制台应用有了Unicode编码支持。

引用

  • http://msdn.microsoft.com/en-us/library/ms171868.aspx
  • Mr Sukesh marla的精彩文章ASP.NET 4.5 new features

当你有空的时候,一定来看看我的网站 www.questpond.com关于.NET4.5面试问和答,我已经在这方面有了不少努力。

astrhhjync

原文链接:http://www.codeproject.com/Articles/599756/Five-Great-NET-Framework-4-5-Features

译文链接:http://blog.jobbole.com/51271/

2
0
分享到:
评论

相关推荐

    .NET Framework4.5安装包

    5. ** RyuJIT 编译器**:.NET Framework 4.5首次引入了RyuJIT( Ryu Just-In-Time Compiler ),这是一个新的即时编译器,能够提供更快的代码执行速度,特别是在64位平台上。 6. **内存管理**:.NET Framework 4.5...

    .net framework 4.5 32位

    .NET Framework 4.5是微软开发的一个全面的、统一的编程平台,用于构建和运行各种类型的应用程序。这个版本在.NET Framework 4.0的基础上进行了大量改进和扩展,旨在提高性能、可伸缩性和安全性。它包含了一个丰富的...

    Microsoft .NET Framework 4.5安装程序

    .NET Framework 4.5是这个框架的一个重要版本,发布于2012年,它在前一版本的基础上引入了大量改进和新特性,以支持更高效、更现代的开发需求。 .NET Framework 4.5的核心组成部分包括Common Language Runtime (CLR...

    postman_64_6.5.3+.net framework 4.5.zip

    在本资源包"postman_64_6.5.3+.net framework 4.5.zip"中,包含两个关键组件:Postman的Windows 64位离线安装程序和.NET Framework 4.5的更新。 首先,Postman-win64-6.5.3-Setup.exe是Postman的64位版本安装程序。...

    Microsoft .NET Framework 4.5(4.5.50709)

    总的来说,.NET Framework 4.5(4.5.50709)是微软在开发平台上的一个重要里程碑,它带来了许多新的特性和改进,同时解决了安装过程中的问题,为开发者提供了更加稳定和高效的工作环境。对于需要使用.NET Framework...

    二维码/条形码识别工具(C#/.Net Framework4.5)

    5. **QrCodeTool**:这个文件很可能是项目的主程序或库文件,包含了二维码和条形码识别的核心功能。可能包括图像输入接口、解码算法、错误校验机制以及结果输出等功能。 开发这样的工具,需要理解条形码和二维码的...

    基于.net framework 4.5 的postgresql 的连接api(Npgsql.dll,Mono.Security.dll)

    在.NET Framework 4.5环境下,与PostgreSQL数据库进行交互主要依赖于第三方库,其中最常用的是Npgsql。Npgsql是一个强大的、完全托管的.NET数据提供者,它允许.NET开发者利用PostgreSQL的强大功能。本篇将详细介绍...

    .Net FrameWork4.5

    综上所述,.NET Framework 4.5不仅是一个运行库,还是一个包含许多先进特性和工具的综合开发环境,它为开发者提供了丰富的类库、强大的语言支持和高效的开发工具,旨在简化开发流程,提升应用程序的性能和用户体验。...

    .NETFrameWork4.5(官方离线安装版)

    .NET Framework 4.5是微软开发的一个重要软件框架,它为开发者提供了构建各种类型的应用程序所需的类库和服务。这个框架的官方离线安装版特别适用于那些没有网络连接或者需要在多台计算机上快速部署.NET Framework的...

    .NET Framework 4.5 离线安装包 完整版 NDP451-KB2858728-x86-x64

    .NET Framework 4.5是微软开发的一个重要软件框架,它为开发者提供了构建、运行基于Windows的应用...通过下载并安装这个离线包,用户能够享受到.NET Framework 4.5带来的最新特性和性能提升,同时确保系统的安全性。

    .NET Framework 4.5 平台

    .NET Framework 4.5是微软推出的一个重要的软件开发框架,它是.NET Framework 4的升级版本,旨在提升应用程序的性能、安全性和跨平台兼容性。这个框架的发布为开发者提供了更强大的工具和库,以构建高性能的Windows...

    Microsoft .NET Framework 4.5 x86 x64

    Microsoft .NET Framework 4.5是.NET Framework家族中的一个重要版本,它为开发者提供了丰富的编程模型和高性能的应用程序运行环境。这个框架是跨平台的,支持32位(x86)和64位(x64)操作系统,旨在提升应用程序的性能...

    .NET Framework 4.5安装包.zip

    .NET Framework 4.5是微软开发的一个全面的、统一的编程模型,用于构建和运行下一代的应用程序和Web服务。这个框架版本在前一版本的基础上进行了大量改进和增强,旨在提高性能、可维护性和开发者的生产力。以下是...

    Microsoft .NET Framework 4.5.zip

    在本案例中,我们关注的是.NET Framework 4.5版本,这是一个重要的更新,为开发者提供了许多新特性和性能改进。虽然提及的是.NET Framework 5.0,但描述中指出.NET Framework 4.5在这里作为备选,可能是因为某些情况...

    .net Framework 4.5 及以下框架信息

    .NET Framework 4.5及其以下版本是微软公司推出的一个重要的应用程序开发平台,它为开发者提供了构建、运行基于Windows的应用程序所需的类库、编译器和运行时环境。这个框架自2002年首次发布以来,经过多次迭代,4.5...

    .NET Framework4.5

    总结起来,.NET Framework 4.5是一个强大的开发平台,它通过丰富的特性和改进,提升了开发者的生产力,同时也为用户带来了更流畅、更安全的软件体验。无论是在企业级应用、Web开发还是桌面应用中,.NET Framework ...

    .NET-Framework4.5.zip

    .NET Framework 4.5是微软开发的一个重要软件框架,它为开发者提供了运行和构建现代应用程序所需的环境。这个框架是.NET Framework 4的升级版本,包含了众多改进和新特性,旨在提高应用程序的性能、可靠性和安全性。...

    VS2022支持Net4.5的方法,亲测可用

    在许多老项目中,尤其是那些使用WinForms、WPF或者依赖于4.5特性的库的项目,依然需要.NET Framework 4.5的支持。 默认情况下,VS2022不提供.NET Framework 4.5的安装选项,但可以通过第三方工具或手动处理来解决这...

    .NET Framework 4.5

    .NET Framework 4.5是微软开发的一个全面且成熟的应用程序运行环境,用于支持Windows操作系统上的软件开发和执行。这个框架的发布对开发者来说是一个重要的里程碑,因为它引入了一系列新特性和性能改进,旨在提升...

    .net4.5工具箱

    .NET 4.5工具箱是这个平台的一个重要组成部分,它集成了针对.NET Framework 4.5的开发和编译功能,同时也兼容3.5和4.0版本的开发环境,为开发者带来了极大的便利。 首先,我们来了解一下.NET Framework 4.5。这是...

Global site tag (gtag.js) - Google Analytics