| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
asp.net 2.0 中的异步页功能应用http://www.iyit.net 日期:2006-5-13 14:29:23 来源:msdn 点击: |
asp.net 2.0 提供了大量新功能,其中包括声明性数据绑定和母版页,成员和角色管理服务等。但我认为最棒的功能是异步页,接下来让我告诉您其中的原因。 当 asp.net 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程。一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求。如果一个同步请求成为 i/o 绑定(例如,如果它调用一个远程 web 服务或查询一个远程数据库,并等待调用返回),那么分配给该请求的线程在调用返回之前处于挂起状态。这影响了可伸缩性,原因是线程池的可用线程是有限的。如果所有请求处理线程全部阻塞以等待 i/o 操作完成,则其他请求排入队列等待线程释放。最好的情况是吞吐量减少,因为请求等待较长的时间才能得到处理。最坏的情况则是该队列填满,并且 asp.net 因 503“server unavailable”错误使后续请求失败。 异步页为由 i/o 绑定的请求引起的问题提供优秀的解决方案。页处理从线程池线程开始,但是当一个异步 i/o 操作开始响应 asp.net 的信号之后,该线程返回线程池。当该操作完成时,asp.net 从线程池提取另一个线程,并完成该请求的处理。由于线程池线程得到了更高效的使用,因此提高了可伸缩性。那些挂起等待 i/o 完成的线程现在可用于服务其他请求。直接的受益方是不执行长时间 i/o 操作并因此可以快速进出管线的请求。长时间等待进入管线会对此类请求的性能带来不小的负面影响。 asp.net 2.0 beta 2 异步页基础结构的相关文档很少。让我们展望一下异步页的前景,从而弥补这点不足。请记住,本专栏涉及 asp.net 2.0 和 .net framework 2.0 的测试版本。 asp.net 1.x 中的异步页 asp.net 1.x 本质上不支持异步页,但是通过坚韧的努力和不懈地创新可以生成异步页。有关更多概述信息,请参阅相关资料 这里的技巧是,在一个页的代码隐藏类中实现 ihttpasynchandler,从而提示 asp.net 通过调用 ihttpasynchandler.beginprocessrequest 来处理请求,而不是通过调用该页的 ihttphandler.processrequest 方法。然后,您的 beginprocessrequest 实现可以启动另一个线程。该线程调用 base.processrequest,使得页进入其常规请求处理生命周期(完成诸如 load 和 render 的事件),但是在非 threadpool 线程上例外。同时,启动新线程之后 beginprocessrequest 立即返回,从而允许执行 beginprocessrequest 的线程返回线程池。 这是基本思想,但细节中还有很多注意事项。其中,您需要实现 iasyncresult,并从 beginprocessrequest 中返回它。这通常意味着创建一个 manualresetevent 对象,并且当 processrequest 在后台线程中返回时向其发送信号。此外,您必须提供调用 base.processrequest 的线程。遗憾的是,多数用于将工作移到后台线程的常规技术(包括 thread.start、threadpool.queueuserworkitem 和异步委托)在 asp.net 应用程序中都是起反作用的,因为它们或者从线程池“偷盗”线程,或者有不受限制的线程增长的危险。正确的异步页实现使用自定义线程池,但自定义线程池类不容易编写。 主要是在 asp.net 1.x 中生成异步页并非不可能,而是有些乏味。在尝试一、两次之后,您不禁会想一定会有更好的方法。目前,这个好方法就是 asp.net 2.0。 asp.net 2.0 中的异步页 asp.net 2.0 极大地简化了生成异步页的方式。首先使用该页的 @ page 指令引入 async=“true” 属性,如下所示: 在后台,这会通知 asp.net 在该页中实现 ihttpasynchandler。接下来,您在该页生存期的早期(例如,在 page_load 时)调用新的 page.addonprerendercompleteasync 方法来注册一个 begin 方法和一个 end 方法,如以下代码所示: 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:使用 asp.net 加密口令 下一篇:没有了 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||