我正在尝试使用BackgroundWorker对Web服务进行负载测试,
代码是:

    private void button1_Click(object sender, EventArgs e)
    {
        CheckWS("11111");
        CheckWS("22222");
        CheckWS("3344111");
        // .. and some more of those, approx 1000
    }

    public void CheckWS(string sUser)
    {
        BackgroundWorker bgWork = new BackgroundWorker();

        bgWork.DoWork += new DoWorkEventHandler(bgWork_DoWork);

        sObject sData = new sObject();
        sData.iNum = iCount++;
        sData.sId = sUser;
        bgWork.RunWorkerAsync(sData);
    }

    public void bgWork_DoWork(object sender, DoWorkEventArgs e)
    {
        // Update a textbox that this worker started
        ...
        // Run a web service
        ...
        // Update the textbox as worker ended
    }

但是,根据完成工作所花费的时间以及根据 worker 的输出(文本框中的 worker “开始”和“结束”),每个 worker 开始花费的时间都太长了-

我希望所有东西都可以同时运行,但是相反,它一次只执行2-3个后台工作程序...

关于这个问题有什么想法吗?

最佳答案

后台工作程序在ThreadPool之上运行,TP故意限制了线程数。

由于这是一个Test(-driver)应用程序,因此更改Pool的配置没有问题。您可以将最小线程数设置为合理的值。

   ThreadPool.SetMinThreads(20, 20);

10-08 19:36