我创建了一个简单的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库的某种基本限制吗?请帮助谢谢。