ASP.NET网页编程之.net中反射、emit、expression和dynamic的功能对照仓酷云
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听)classStudent{publicstringName{get;set;}}staticdoubleTest(intloop,Studentstu,Func<Student,string>action){varwatch=Stopwatch.StartNew();strings=null;for(vari=0;i<loop;i++)s=action(stu);returnwatch.ElapsedTicks;}staticFunc<Student,string>NativeGetter(){returns=>s.Name;}staticFunc<Student,string>ReflectedGetter(){vartype=typeof(Student);varprop=type.GetProperty("Name");returns=>(string)prop.GetValue(s,null);}staticFunc<Student,string>EmittedGetter(){vardm=newDynamicMethod(name:"EmittedGetter",returnType:typeof(string),parameterTypes:new[]{typeof(Student)},owner:typeof(Student));vartype=typeof(Student);varprop=type.GetMethod("get_Name");varil=dm.GetILGenerator();il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Call,prop);il.Emit(OpCodes.Ret);return(Func<Student,string>)dm.CreateDelegate(typeof(Func<Student,string>));}staticFunc<Student,string>ExpressionGetter(){vartype=typeof(Student);varprop=type.GetMethod("get_Name");ParameterExpressionpa=Expression.Parameter(typeof(Student));Expressionbody=Expression.Call(pa,prop);returnExpression.Lambda<Func<Student,string>>(body,pa).Compile();}staticFunc<Student,string>DynamicGetter(){returns=>{dynamicd=s;returnd.Name;};}publicstaticvoidRun(){constintloop=5000000;varstu=newStudent{Name="Mike"};vardynamic=Test(loop,stu,DynamicGetter());varexpression=Test(loop,stu,ExpressionGetter());varnative=Test(loop,stu,NativeGetter());varemitted=Test(loop,stu,EmittedGetter());varreflected=Test(loop,stu,ReflectedGetter());Console.WriteLine("native:{0}ndynamic:{1}nemit:{2}nexpression:{3}nreflection:{4}",1,dynamic/native,emitted/native,expression/native,reflected/native);Console.ReadKey();}
测试了局
1.当轮回次数对照小的时分,loop=1000
native:1
dynamic:540.444964871194
emit:0.704918032786885
expression:0.224824355971897
reflection:8.37002341920375
2.loop=5000000
native:1
dynamic:4.37328053807767
emit:0.96159470600998
expression:1.00412887828162
reflection:35.909097418095
捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
页:
[1]