乐观 发表于 2015-1-18 11:15:23

ASP.NET网页编程之.NET Framework 4.5 五个很棒的特征仓酷云

它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”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来架构,却不知道如何下手。

灵魂腐蚀 发表于 2015-1-20 18:38:46

有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。

小妖女 发表于 2015-1-21 11:44:48

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。

分手快乐 发表于 2015-1-23 21:49:33

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。

admin 发表于 2015-1-31 20:05:56

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。

海妖 发表于 2015-2-5 09:48:30

是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。

爱飞 发表于 2015-2-5 19:44:08

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

再见西城 发表于 2015-2-13 05:54:46

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

透明 发表于 2015-3-3 15:26:25

HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.

山那边是海 发表于 2015-3-11 11:31:23

能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。

只想知道 发表于 2015-3-18 08:06:23

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

若相依 发表于 2015-3-25 13:51:45

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
页: [1]
查看完整版本: ASP.NET网页编程之.NET Framework 4.5 五个很棒的特征仓酷云