仓酷云

标题: ASP教程之ASP.NET教程:WaitHandle类 [打印本页]

作者: 不帅    时间: 2015-1-16 22:05
标题: ASP教程之ASP.NET教程:WaitHandle类
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。比来笔者在用.Net写程序时碰到一个成绩:有N个互不相干的义务要在线程池中跑,但有一个线程要守候N个义务完成以后才干持续。而这个N是个未知数,大概会很年夜(因而才会想到利用线程池而不是手动往new一个therad)。翻了翻.Net类库的文档,发明一个叫WaitHandle的类。这个类的用法挺有意义,必要为每一个线程创立一个WaitHandle工具并把它们放在一个数组中,然后用WaitHandle类中的WaitAll办法来守候这些WaitHandle被挪用Set办法。(代码就不写了,能够参考MSDNhttp://msdn.microsoft.com/zh-cn/library/system.threading.waithandle.aspx)
固然以为这有点庞大,但仍是试了试。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。代码的思绪也许是上面如许:
WaitHandle[]handles=newWaitHandle[]{newAutoResetEvent(false),newAutoResetEvent(false)};inttimes=(int)N/2;inti;for(i=0;i<times;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2]),handles[0]);ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[1]);WaitHandle.WaitAll(handles);}if(i*2<N){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[0]);WaitHandle.WaitAny(handles);}

固然代码这么写对照庞大,但最少能够包管运转时不会出成绩。但这么写代码明显其实不KISS!因而问了问妙手,说有个RegisterWaitForSingleObject办法,但一看这个办法的参数列表就够让人晕的了。有点吊唁Java了,记得Java中有个CountDownLatch类,创立类的时分赋一个初始值X,然后主线程中挪用await,线程池中跑的线程挪用countDown办法。就能够完成主线程守候X次countDown办法挪用以后持续。如许既没有64个WaitHandle的限定,也不必往研讨谁人RegisterWaitForSingleObject办法。不外成绩在于.Net中并没有这么一个器材,只能本人下手了。
classCountDownLatch{privateobjectlockobj;privateintcounts;
publicCountDownLatch(intcounts){this.counts=counts;}
publicvoidAwait(){lock(lockobj){while(counts>0){Monitor.Wait(lockobj);}}}
publicvoidCountDown(){lock(lockobj){counts--;Monitor.PulseAll(lockobj);}}}

有了这个器材,下面的代码能够改的更少一些。
CountDownLatchcdl=newCountDownLatch(N);for(inti=0;i<N;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i]),cdl);}cdl.Awati();

而关于义务的代码来讲,在开头处吧对WaitHandle的Set办法的挪用改成对CountDownLatch类的CountDown办法的挪用便可。
最初,我想说的是实在没需要把思绪都拘谨在.Net上大概Java上,互相自创会让思绪更坦荡一些。
不外有句内心话想说的就是,实在Java的类库在某些方面做的比.Net好一些。

缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。
作者: 活着的死人    时间: 2015-1-18 20:15
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
作者: 分手快乐    时间: 2015-1-27 20:24
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 深爱那片海    时间: 2015-2-5 15:07
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
作者: 若相依    时间: 2015-2-12 11:55
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
作者: 仓酷云    时间: 2015-3-3 03:36
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
作者: 再现理想    时间: 2015-3-11 09:45
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
作者: 小魔女    时间: 2015-3-18 08:06
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
作者: 灵魂腐蚀    时间: 2015-3-25 18:32
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2