【问题标题】:Windows based application to test my ASP.NET application用于测试我的 ASP.NET 应用程序的基于 Windows 的应用程序
【发布时间】:2012-02-09 12:48:12
【问题描述】:

我想通过多重访问来强调我的网站。为此,我创建了一个基于 Windows 的应用程序,该应用程序调用网站的 1000 次。 不幸的是,它只适用于 2 次通话。这是代码:

    static void myMethod( int i)
    {
        int j = 0;

        try
        {
            string url = "";
            WebRequest wr = null;
            HttpWebResponse response = null;                                
            url = String.Format("http://www.google.com");
            wr = WebRequest.Create(url);
            //wr.Timeout = 1000;
            response = (HttpWebResponse)wr.GetResponse();                
            MessageBox.Show("end");
        }
        catch (Exception ex)
        {
            MessageBox.Show(j.ToString() + "   " + ex.Message);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 1000; i++)
        {
            ThreadStart starter = delegate { myMethod(i); };
            Thread thread = new Thread(starter);
            thread.Start();               
        }

    }

【问题讨论】:

标签: c# asp.net multithreading stress-testing


【解决方案1】:

默认情况下HttpRequest 只允许两个连接到同一主机。 您可以通过设置DefaultConnectionLimit 属性来更改此设置。

【讨论】:

  • 确实如此。 OP 如此意外地与连接限制对接的原因是因为它们没有关闭/处理响应,因此在 ServicePoint 中留下打开的(但未引用的)连接,只有在 GC 出现时才会关闭。对连接的另一端也很粗鲁......挂断连接而不读取响应然后没有立即关闭连接。
【解决方案2】:

宁可使用Free WCAT Tool 来负载测试您的 ASP.NET 页面。

也可以观看此视频[How Do I:] Load Test a Web Application

如果您有 Visual Studio 2010 Ultimate,请参阅link

我希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在继续之前尝试处理 IDisposable 实例(即响应)。

    static void myMethod( int i)
    {
        int j = 0;
    
        try
        {
    
            string url = String.Format("http://www.google.com");
            WebRequest wr = WebRequest.Create(url);
            using(HttpWebResponse response = (HttpWebResponse)wr.GetResponse())
            using(Stream responseStream = wr.GetResponseStream())
            {
                //handle response / response stream
            }                
            MessageBox.Show("end");  //this won't scale!!!
        }
        catch (Exception ex)
        {
            MessageBox.Show(j.ToString() + "   " + ex.Message);
        }
    }
    

    【讨论】:

    • 这个改动没有任何意义。
    • @WAPGuy:真的吗?什么对你没有意义?让 GC 启动关闭请求响应对您来说是个好主意吗?
    • @WAPGuy 如果你要说这样的话,你应该告诉我们你为什么这么想。
    • @WAP Guy “这个改变没有任何意义” - 为什么不呢?最初的方法没有多大意义,但处置 IDisposable 对象的建议是合理的。
    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多