CPUを多用するASP.NETWebサービスアプリケーションに取り組んでいます。4コアサーバーで、CPUが十分に活用されていないことに気づきました。そこで、100%CPUに到達できるかどうかを確認するための簡単なサービスを考え出しました。ここにあります。
呼び出し元のクライアントは、同時スレッドと繰り返しメッセージでこのサーバーを攻撃します。各リクエストは、完了するまでに0.5〜2秒かかります(スレッドの数によって異なります)。到達する最大のCPU使用率は、4つのコアすべてで80%です。4スレッドまたは16スレッド、1クライアントまたは2クライアントを使用しても同じ結果が得られます。2コアボックスにも同じ問題があります。
それで、無限ループにないコードでマルチコアIISサーバーの100%CPUに到達することは可能ですか?
public class MyHttpHandler : IHttpHandler
{
public bool IsReusable { get { return true; } }
public void ProcessRequest( HttpContext context )
{
switch( context.Request.HttpMethod )
{
case "GET":
{
string s = "";
for( int i = 0; i < 999999; ++i )
{
s = s.Substring( s.Length / 2 );
s += i.ToString();
}
context.Response.Output.WriteLine( "<html><body><h1>Web Service - " + s + "</h1></body></html>" );
context.Response.StatusCode = 200;
break;
}
default:
{
context.Response.StatusCode = 405;
break;
}
}
}
}