多个客户端同时连接时如何提高性能

时间:2015-12-07 19:32:20

标签: iis asp.net-web-api

我注意到当超过10个并发客户端请求我的API端点时,响应时间会显着增加。

我正在使用IIS 7.5来托管我的MVC Web API应用程序(.Net 4.5.2)

我已经创建了一个简单的API动作来检查:

public SimpleResponse<bool> Get()
{
   Thread.Sleep(50);

   return new SimpleResponse<bool>
   {
       Value = true
   };
}

以下是我的测试客户端的外观:

 private static void TestClientConnections(int clients)
    {
        var client = new HttpClient();

        for (int i = 0; i < clients; i ++)
        {
            Task.Factory.StartNew(() =>
            {
                Stopwatch sw = new Stopwatch();

                while (true)
                {
                    sw.Restart();
                    var res = client.GetAsync("http://localhost:98/ping").Result;

                    sw.Stop();
                    Console.WriteLine("{0}ms", sw.ElapsedMilliseconds);
                }               
            }, TaskCreationOptions.LongRunning);      
        }
    }

运行10个客户端时的控制台输出:

62ms
63ms
62ms
61ms
63ms
64ms
63ms
...

运行30个客户端时的控制台输出:

187ms
187ms
187ms
187ms
186ms
186ms
186ms
...

为了克服这个问题,我试图做些什么:

1)考虑到这是客户端问题,试图将System.Net.ServicePointManager.DefaultConnectionLimit设置为大号;

2)试图改变machine.config中的线程限制:

<processModel maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="150"/>

3)试图增加最大连接数:

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="2000"/>
  </connectionManagement>
</system.net>

4)试图使api动作异步。

上面没有提到的东西对我没有帮助......有什么想法吗?

我真的需要至少处理100个并发客户端。

0 个答案:

没有答案