ASPX页Web服务调用性能优化-C#,JAVA视频教学,网页设计,网站开发,asp,php,mysql,asp.net| 学知识教程网,
设为首页|收藏学知识 |改版意见收集|智能DIY搜索|加入我们|网站地图
当前在线人数:8770
好教程 易学习 新资讯!
ASP.NET

ASPX页Web服务调用性能优化

2007-07-03 源自: 网友评论 共有( )条评论! 内容报错
本文章地址:http://dev.xuezhishi.net/website/NET/2007-10-17/20782.html [将本信息与朋友分享!]

                     

  真正的解决方案:异步请求处理

  调整配置设置是一种改善问题的方法,而在实际设计 Web 应用程序时通过某种方式彻底解决问题则是另一回事。等待阻塞的调用完成的线程永远也不会有更好的调整余地,因此,解决的办法是完全避免阻塞问题。异步处理请求就是一个适当的解决方案。这表现在两个方面:进行异步 Web 服务调用,以及在 ASP.NET Web 应用程序中异步处理请求。

  异步 Web 服务调用

  在以前的专栏中,我写了有关异步调用 Web 服务的问题。能够使线程不用等待 Web 服务调用完成是创建释放线程以便处理更多请求的异步页面处理模型的关键部分。此外,异步调用 Web 服务也比较简单。

  请考虑以下 ASPX 页面的 Visual Basic.NET 代码:

' 错用同步 Web 服务调用所造成的性能极差的
' 页面!
Public Class SyncPage
Inherits System.Web.UI.Page

Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'调用 Web 服务
Dim proxy As New localhost.Service1
Label1.Text = proxy.Method1(500)
Label2.Text = proxy.Method1(200)
End Sub

End Class

  此代码非常易懂。页面加载时将创建一个 Web 服务代理实例,然后用该实例两次调用一个名为 Method1 的 Web 方法。Method1 只返回包含传递给该方法的输入参数的字符串。为了向该系统添加一定程度的延迟,Method1 在返回字符串之前还休眠了 3 秒钟。从调用返回到 Method1 的字符串被放在 ASPX 页面上的两个标签的文本中。该页面提供的性能极差,并且像一块海绵一样从进程线程池中吸取线程。由于在 Method1 Web 方法中有 3 秒钟的延迟,对该页面的一个调用至少要 6 秒钟才能完成。

  以下代码片段显示了一个类似 Web 页面的代码,只不过现在进行的是异步 Web 服务调用。

Public Class AsyncPage
Inherits System.Web.UI.Page

Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'调用 Web 服务
Dim proxy As New localhost.Service1
Dim res As IAsyncResult
= proxy.BeginMethod1(500, Nothing, Nothing)
Dim res2 As IAsyncResult
= proxy.BeginMethod1(200, Nothing, Nothing)
Label1.Text = proxy.EndMethod1(res)
Label2.Text = proxy.EndMethod1(res2)
End Sub

End Class

  同样,该页面将创建一个 Web 服务代理,然后两次调用 Method1 Web 方法。不同的是,现在调用的是 BeginMethod1,而不是直接调用 Method1。BeginMethod1 调用将立即返回,这样我们就可以开始第二次调用该方法。与第一个示例中等待第一个 Web 服务调用完成不同,现在我们可以同时开始这两个调用。对 EndMethod1 的调用只是在特定的调用完成前会造成阻塞。

  值得注意的是,当我们从 ASPX 页面返回后,响应将发送给客户端。因此,在获得所需的数据之前,我们无法从 Page_Load 方法返回。这就是我们要阻塞 Web 服务调用直至其完成的原因。好的方面是两个调用可以同时执行,因此先前 6 秒钟的延迟现在将降到 3 秒钟左右。这虽然好一些,但仍然创建了阻塞的线程。我们真正需要的是在完成 Web 服务调用的同时,能够释放线程以便其处理 HTTP 请求。问题在于,ASPX 页面的处理模型没有一个异步执行模式。不过,ASP.NET 确实提供了一个解决此问题的方法。

 

http://dev.xuezhishi.net/website/NET/2007-10-17/20782.html
分页:1 [2] 3
评论 点击查看
 


加入QQ群:35714363 一起成长
我要加入更多群 我有意见要反映
开发教室

学知识原创教程下载

本类最近更新
阅读排行

其他相关信息