|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。简介
自.NET4.5公布已过了差未几1年了。可是跟着比来微软年夜多半的公布,与.NET开辟者交换的成绩显现,开辟者仅晓得一到两个特征,其他的特征仅仅停止在MSDN并以复杂的文档情势存在着。
好比说,当你问一个.NET开辟者.NET框架内核中有甚么新工具的时分,他们中的年夜多半仅仅会说异步与守候(最少和我扳谈的人们仅仅谈到了这些特征)。
别的也很难贯穿一切的新特征。由于这些特征大概关于你今朝正在开辟的事情其实不如听上往那末风趣。
以是在这篇文章中我想说起我喜好的5个在.NET4.5内核中的特征。固然,这大概只是我喜好的而并非你的。可是我所做的是当我选择这些特征时我也想着较年夜的.NET社区,我但愿我满意了这类希冀。
提醒:这篇文章没有会商在ASP.NET,WCF,WPF,WWF等中的新特征。仅仅讲了关于内核的新特征。
特征1:异步与守候(代码开辟者)
这个特征已被吹捧过分而且每一个.NET传教者都议论它。可是这仍旧是我喜好的而且你会晓得为何从这里只要几行。
异步和守候是标志,它们标志当义务(线程)停止时把持应当恢复到代码的地位。
让我们实验经由过程上面的代码来弄清下面声明的寄义。假如你分明上面代码的流程:
- Staticvoidmain()从入手下手处挪用Method()办法。
- Method()办法发生一个名为LongTask的义务(线程),线程将守候10秒。
- 同时,在挪用了义务以后,把持又回到Method()办法持续实行剩下的代码。换句话说,正如挪用时多线程的(Task.Run…),LongTask仍在运转。比方,守候10秒而且Method()办法剩下的代码也在实行。
如今在不异的情形下,我们想要第3步实行得纷歧样。我们想要在LongTask()实行完成后,把持应当回到Method办法实行接上去的代码。“异步”和“守候”关头字可以匡助完成下面的功效。
这里有三个关于关头字“异步”和“守候”的重点必要记着:
- 异步和守候是一对关头字。你不克不及自力利用它们。
- 异步使用于办法。这个关头字是一个标记,是说该办法会有一个守候关头字。
- 守候关头字标志了义务恢复实行的地位。以是你老是发明这个关头字与Task联系关系。
上面是后面会商的代码的订正版本,这里我们使用了异步与守候。一切其他的步骤仍旧如前所述,可是“步骤3”将在“步骤2”完成以后实行。复杂来讲就是把持在义务完成以后回到Method()办法。
如今你已浏览了“异步”与“守候”的内容,让我来提个成绩。下面的代码一样也能经由过程Task.Wait大概Task.ContinueWith完成,那末它们有甚么分歧?我把这个成绩留作给你的家庭功课。
特征2:便当Zip紧缩(Zip紧缩)
Zip是最为人所承受的文件格局之一。Zip格局以某些内置的名字被几近一切操纵体系撑持。
- 在Windows操纵体系中,它以“紧缩文件”的称号完成。
- 在MAC操纵体系中,它以“文档有用程序”的称号完成。
如今在.NET中我们对实行Zip紧缩没有内置的撑持。很多开辟者有用第三方组件如“DotnetZip”。在.NET4.5中,Zip属性内置于框架自己,以System.IO.Compression的定名空间内置。
第一步你必要援用两个定名空间:
- System.IO.Compression.FileSystem
- System.IO.Compression
接上去援用以下两个定名空间:
1
usingSystem.IO.Compression;
假如你想要从文件夹紧缩文件你能够挪用以下所示的CreateFromDirectory函数。
1
ZipFile.CreateFromDirectory(@"D:data",@"D:data.zip");
假如你想要解压,你能够挪用以下代码所示的ExtractToDirectory函数。
1
ZipFile.ExtractToDirectory(@"D:data.zip",@"D:dataunzip");
特征3:正则表达式超时(超时)
“正则表达式”一向是做考证首选的体例。假如你是正则表达式的老手,请看正则表达式,我注释了正则表达式是怎样实行的。可是正由于正则表达式的典范逻辑剖析使得它表露于DOS打击下。让我们试着了解方才我说的。
作为例子请思索如许的正则表达式-“^(d+)$”。这个正则表达式标明只能无数字。你也能够看正则表达式标记图,它标了然这个正则表达式会怎样求值。如今让我们假定要考证“123456X”。这将有6条路径以下图所示。
但假如我们再多加一个数字出来,将会有7条路径。换句话说,跟着字符长度的增添,正则表达式将会花更多工夫实行。也就是说,求值工夫与字符长度成线性比例。
如今让我们把之前界说的正则式从“^(d+)$”变成“^(d+)+$”。假如你看正则表达式标记图它将相称庞大。假如我们如今试着考证“123456X”,将会有32条路径。假如你再增添一个字符,路径数将会增添到64。
换句话说,下面的正则表达式中工夫开支与字符数量为成倍干系。
如今你大概要问的是,这很主要吗?线性上升的求值工夫能够被黑客使用来举行DOS(回绝服务)打击。他们能够部署一个长并且是充足长的字符串来使你的使用永久挂起。
关于这个成绩符合的办理办法是在正则表达式实行上设置超不时间。好动静是,在.NET4.5中你能够界说一个超时属性以下代码所示。以是假如你收就任何怀有歹意的字符串,使用不会永久在轮回中实行。
1
2
3
4
5
6
7
8
9
try
{
varregEx=newRegex(@”^(d+)+$”,RegexOptions.Singleline,TimeSpan.FromSeconds(2));
varmatch=regEx.Match(“123453109839109283090492309480329489812093809x”);
}
catch(RegexMatchTimeoutExceptionex)
{
Console.WriteLine(“RegexTimeout”);
}
特征4:优化设置文件(提拔启动功能)
我们都晓得.NET代码是半编译的格局。在运转时,JIT(Just-in-Time)编译器实行而且转换这类半编译的IL代码为呆板原生代码。对JIT最年夜的埋怨之一是当.NET使用初度实行的时分,它运转得很慢由于JIT在忙着转换IL代码到呆板代码。
为了下降这个启动工夫,在.NET4.5中有称为“优化设置文件”的内容。设置文件不外是一个纪录了使用在启动运转中必要的办法列表的复杂文件。以是当使用入手下手后,背景的JIT实行而且入手下手转换这些办法的IL代码为呆板/原生言语。
这个背景JIT在多个处置器上编译启动办法从而进一步下降启动工夫。别的请注重你必要多核处置器来完成设置文件优化。假如你没有多核处置器那末这个设定会被疏忽。
为了创立“设置文件”这个文件,起首你必要引进System.Runtime定名空间。然后你能够挪用静态类ProfileOptimization的SetProfileRoot和StartProfile办法。如今当使用启动背景JIT,它将会读取设置文件而且在背景编译启动办法从而下降启动工夫。
1
2
3
4
5
6
usingSystem.Runtime;
//CalltheSetprofilerrootandStartprofilemethod
ProfileOptimization.SetProfileRoot(@"D:ProfileFile");
ProfileOptimization.StartProfile("ProfileFile");
主要提醒:ASP.NET4.5和Silverlight5使用默许撑持Profileoptimization。以是上述代码在这些手艺中无需编写。
特征5:渣滓接纳(渣滓背景清算)
渣滓接纳在.NET使用中是一项真正沉重的义务。当是ASP.NET使用的时分,它变得更沉重。ASP.NET使用在服务器运转,很多客户端向服务器发送哀求从而发生对象负荷,使得渣滓接纳的确勉力清算不必要的对象。
在.NET4.0中,当渣滓接纳运转清算的时分,一切的使用程序线程都停息了。在上图中你能够看到我们有3个使用程序线程在实行。有两个渣滓接纳运转在分歧的线程上。一个渣滓接纳线程对应一个逻辑处置器。如今使用程序线程运转并实行它们的义务,陪伴着这些使用程序线程的实行它们也创立了操纵对象。
在某个工夫点,背景渣滓接纳运转入手下手清算。当这些渣滓接纳入手下手清算的时分,它们停息了一切的使用程序线程。这使得服务器/使用程序在那一刻不呼应了。
为了克制上述成绩,服务器渣滓接纳被引进了。在服务器渣滓接纳机制中多创立了一个运转在背景的线程。这个线程在背景运转并延续清算2代对象(关于渣滓接纳0,1和2代的视频)从而下降主渣滓接纳线程的开支。因为双渣滓接纳线程的实行,主使用程序线程很少被停息,进而增添了使用程序吞吐量。为了利用服务器渣滓接纳,我们必要利用gcServerXML标签而且将它置为true。
1
2
3
4
5
<configuration>
<runtime>
<gcServerenabled="true"/>
</runtime>
</configuration>
另三个值得探究的特征
设置默许使用程序域的地区性
在上一个版本的.NET中假如我想设置地区性那末我必要在每一个线程中设置。上面的示例程序演示了在线程级别设置地区性的疾苦。当我们有大批多线程使用程序的时分这是真实的疾苦。
1
2
3
CultureInfocul=newCultureInfo(strCulture);
Thread.CurrentThread.CurrentCulture=cul;
Thread.CurrentThread.CurrentUICulture=cul;
在4.5中我们能够在使用程序域级别设置地区性而且一切在这个使用程序域傍边的线程城市承继这个地区性。上面就是怎样完成DefaultThreadCurrentCulture的示例代码。
1
2
3
CultureInfoculture=CultureInfo.CreateSpecificCulture("fr-FR");
CultureInfo.DefaultThreadCurrentCulture=culture;
数组撑持凌驾2GB容量
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。 |
|