できるだけ高速になるように Web サービスを最適化しようとしています。8 コアと 8Gb の RAM を搭載した Windows Server 2008 ボックスの IIS7.5 (.NET4) で実行されている machine.config に次のセクションがあります。
<system.web>
<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608" />
<processModel autoConfig="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />
</system.web>
<system.net>
<connectionManagement>
<add address="*" maxconnection="96"/>
</connectionManagement>
</system.net>
5 秒待ってから戻る .asmx Web サービスがあります。次に、同じサーバー上の Web サイトから次の C# コードを実行します。
CmsDataService service = new CmsDataService();
System.Diagnostics.Stopwatch timer = new Stopwatch();
List<Thread> threads = new List<Thread>();
for (int i = 0; i < RequestCount; i++)
{
threads.Add(new Thread(delegate()
{
service.sleepTest();
}));
}
timer.Start();
foreach (var thread in threads)
{
thread.Start();
}
while (threads.Any(t => t.IsAlive))
{
// wait
}
timer.Stop();
Response.Clear();
Response.Write(timer.ElapsedMilliseconds);
次の結果が返されます。
10 requests in parallel averages = 5027ms
100 requests in parallel averages = 10016ms
1000 requests in parallel averages = 55175ms
最初の結果は問題ないように見えますが、他の結果は非常に遅いようです。通常、SOAP はこれほど遅いのですか、それとも微調整できる構成設定が他にありますか?