2009-04-07 2 views
0

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がどうにかして抑制されていると思うようになります。誰がなぜこれが起こるのか知っていますか?

答えて

2

.net sql接続文字列呼び出しで最大プールサイズを設定できます。私は、デフォルトは20接続最大だと思うので、それを打つと、それらが使用され、本質的に同じ結果を得ることができます。ここでは、接続プーリングに関する記事です。 schwig同様

http://www.15seconds.com/Issue/040830.htm

+1

.NET 4.0/4.5には、デフォルトの最大プールサイズは、このリンクが今死んでいる100 – RickNZ

+0

です –

1

あなたはおそらく、あなたはおそらく、あなたのプロセスにワーカースレッドが不足している帯域幅の制限に実行していない、と述べました。ここで私は啓発であることがわかりますが、MSから読むべき章です:

http://msdn.microsoft.com/en-us/library/ms998549.aspx

関連する問題