Webメソッドを非同期に実装するか、同期的に実装するかの違いを示すために使用できるASP.NET Webサービスを作成しようとしています。これは概念の証明のようなもので、物事を非同期的に書くことによってアプリケーションをよりスケーラブルにする方法を示すことができます。比較のために、私はRunSqlSyncとRunSqlAsyncという2つのメソッドを実装しました。このように:IISまたはASP.NETは何らかの種類の接続を制限しますか?
[WebMethod]
public int RunSqlSync(string sql)
{
// call SQL synchronously
}
[WebMethod]
public IAsyncResult BeginRunSqlAsync(string sql, AsyncCallback callback, object state)
{
// call SQL asynchronously
}
[WebMethod]
public int EndRunSqlAsync(IAsyncResult result)
{
}
私はSQLの呼び出しが完了するまでにしばらく時間がかかった場合は特に、メソッドの非同期バージョンを使用して、より多くの同時要求を処理できるようになることを期待します。残念ながら、どちらの方法でも、リクエスト/秒の制限(SQL呼び出しの待ち時間によって制限が決まる)が発生し、CPUを最大限に活用できないようです。 Ocracoke Load Testで使用するユーザー数を増やしてWebサービスに送信されるリクエスト数を増やすと、実際のTPSスループットを変更せずに平均レスポンス時間が増加するだけです。私はWebサービスを内部的に実装し、要求が完了するまでの時間を測定し、コード内では、個々の要求が負荷に関係なく同じ時間に処理されています。これは、私はASP.NETがどうにかして抑制されていると思うようになります。誰がなぜこれが起こるのか知っていますか?
.NET 4.0/4.5には、デフォルトの最大プールサイズは、このリンクが今死んでいる100 – RickNZ
です –