选择显示字体大小

aspx页web服务调用性能优化(2)

     应当注意的是,对本地计算机的连接数量从来都没有限制,因此,如果是连接到本地主机,则此设置无效。
  
    maxworkerthreads 和 minfreethreads
  
    如果收到 http 503 错误(“服务暂时过载”),则表明线程池中的线程已全部占用,并且请求队列也已超出最大值(apprequestqueuelimit 的默认设置为 100)。对于 iis 5.0 安装,可以简单地增加线程池的大小。而对于 iis 6.0 安装(与 iis 5.0 不兼容),这些设置将无效。
  
    maxworkerthreads 和 maxiothreads 分别控制工作线程数以及处理新提交的 asp.net 请求的线程数。这些设置需要在您的 machine.config 中进行配置,它们将影响您计算机上运行的所有 web 应用程序。maxworkerthreads 是 machine.config 中的 processmodel 元素的一部分,并且您在查看后会发现,该设置的默认值为每个处理器 20 个线程
  
    minfreethreads 设置可以在 machine.config 中进行配置,或者在您的应用程序的 web.config 文件中的 httpruntime 元素下进行配置。该设置的作用是,当空闲的线程数低于所设置的限制时,将禁止使用线程池中的线程来处理传入的 http 请求。如果您需要某个进程线程线程完成挂起的请求,这会很有用。如果所有的线程都被用来处理传入的 http 请求,并且这些请求在等待另一个线程完成其处理,那么就会进入死锁状态。例如,如果您正在从 asp.net 应用程序进行对某个 web 服务的异步 web 服务调用,并且在等待回调函数完成该请求,就会出现这种情况。因为回调必须在进程线程池中的空闲线程上进行。如果查看一下您的 machine.config,将会注意到 minfreethreads 设置的默认值为 8,如果工作线程池的限制为 20,则该默认值还可以满足需要,但是,如果线程池的大小增加到 100,该默认值就太小了。
  
    应当注意的是,如果您的 asp.net 应用程序对本地计算机进行 web 服务调用,则线程池限制的问题将被激化。例如,我为此专栏创建的测试应用程序调用与 aspx 页面同处一台计算机上的 web 服务。因而,对于阻塞的调用,一个线程被同时用于 aspx 页面和 asmx web 服务请求。这有效地使 web 服务器处理的同时请求数增加了一倍。在同时进行两个 web 服务请求(使用异步 web 服务调用)的情况下,我们最终使同时进行的请求数增加了两倍。为避免在回调本地计算机时出现此类问题,您应当考虑您的应用程序的体系结构,使其简单地直接从 aspx 代码来执行 web 方法中的代码。
  
    windows xp 限制
  
    我们必须要注意,如果您在一个 windows? xp 计算机上进行某项测试,则所面临的另一个限制是 xp web 服务器对所允许的同时连接数的人为限制。因为 windows xp 不是服务器平台,其同时连接数被限制为 10。这对于开发环境中的测试通常没问题,但是如果试图进行任何复杂的测试,该限制问题就会比较严重。本地计算机的连接不受此限制影响。
  
    真正的解决方案:异步请求处理
  
    调整配置设置是一种改善问题的方法,而在实际设计 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 秒钟才能完成。
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons