我写了一个函数string GetResponse(string url),用于访问一个url并得到结果。
然后我又同时执行N个相同的线程,在这些线程中循环调用GetResponse(url)(并发调用),结果程序运行速度很慢。而且当线程的数量开到100个或更多时,IIS有时还会报出服务太忙的错误。
但是如果我在调用于GetResponse(url)时进行线程同步lock(),即一次只能有一个线程操作GetResponse(url),则执行速度很快,IIS也很稳定。可这并不是我要求的功能。我要做的是模拟大量用户进行访问。 请问谁能解释一下这种现象的原因或对这种做法做一下分析?

解决方案 »

  1.   

    这个问题很有意思,会不会是你的操作系统不是server版的,IIS支持连接数不够?我帮你UP,呵呵
      

  2.   

    你可以采用一些压力测试工具,VS.NET自带了Application Center Test,还
    有Rational也提供了很好的一些工具
      

  3.   

    你还是用正规的测试软件吧。你自己写的程序运行在服务器上,先把服务器的cpu处理搞垮,然后再说iis和asp.net的故障,这不公平吧。
      

  4.   

    引:“先把服务器的cpu处理搞垮,然后再说iis和asp.net的故障,这不公平吧”呵呵呵,想起了一句话,做人要厚道
    我再帮你顶哦。。
      

  5.   

    如果是多处理器的服务器则可以考虑调整并发工作线程的最大数目(Machine.conifg)。你在做这个测试的时候需要观察一下性能监视器中相关指标,比如内存使用情况,IIS处理请求的时间,队列中的等待数量,IO的读取情况等。最好使用专业的测试压力的工具,可以考虑使用ACT或者LoadRunner等。
      

  6.   

    我在2003server上装有500多个客户怎么速度没感觉慢
      

  7.   

    我记得以前听人说:Application Center Test在操作网络时,实际上还是一个请求一个请求的操作网络,并不能模拟并发。必竟是从一个网卡发出去的请求。
    是这样吗?
      

  8.   

    对了,顺便再问一个问题:为什么我用ATC测试最简单的一个网页,得到的曲线图也是高高低低的,而不是一条稳定的曲线?
      

  9.   

    IIs是不会先死的,多数是数据库服务器先挂掉。