如何使用线程使网络连接/秒饱和

时间:2016-07-12 00:29:01

标签: c# multithreading networking

我创建了一个简单的Azure Web服务(只是回传传递给它的字符串),我希望使用桌面.Net应用尽可能多的网络连接来使服务饱和。桌面应用程序是这样的:

protected void Page_Init(object sender, EventArgs e)
{
    var list = Session["lstObjects"] as List<Line>;
    if (list != null)
    {
        foreach (var obj in list)
        {
            ImageButton imageButton = new ImageButton {ID = obj.ToString()};
            imageButton.Click += cmdChangeColor_Click;
            pnlButtons.Controls.Add(imageButton);
        }
    }
}

Inside ThreadWorker()是使用DownloadString()函数包含WebClient对象的代码。

对于网络应用,我设置了:

        System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
        while (running)
        {
            if (m_working.Count < max_threads && m_queue.Count > 0)
            {
                Queue q = m_queue[0];
                q.timestamp = DateTime.Now;
                q.thread = new Thread(new ParameterizedThreadStart(ThreadWorker));

                m_working.Add(q);
                m_queue.Remove(q);

                q.thread.Start(q);
                while (!q.thread.IsAlive) ;
            }
            ...
            Thread.Sleep(5);
        }

当我运行应用程序时,我只能设置最多约65个连接/秒。将线程休眠时间设置为较低值不会提高性能。但是,如果我运行该应用程序的另一个实例,第二个应用程序仍将显示~65个连接/秒,并且第一个实例不受影响。

我的代码出错了吗?如何编写代码以使连接饱和,可能是1000或10,000个连接/?

或者这是对C#/ .Net库的某种基本限制吗?请帮助谢谢。

0 个答案:

没有答案