2009-04-07 3 views
0

웹 메서드를 비동기식으로 구현하는 것과 동기식으로 구현하는 것의 차이를 나타 내기 위해 사용할 수있는 ASP.NET 웹 서비스를 만들려고합니다. 비동기 적으로 물건을 작성하는 것이 앱의 확장 성을 높이는 방법을 보여주기 위해 사용할 수있는 증명 개념의 일종입니다. 비교를 위해 RunSqlSync와 RunSqlAsync의 두 가지 메서드를 구현했습니다. 이처럼 :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에서 사용하는 사용자 수를 늘림으로써 웹 서비스로 전송되는 요청 수가 증가하면 실제 TPS 처리량을 변경하지 않고 평균 응답 시간 만 증가합니다. 필자는 웹 서비스를 내부적으로 구현하여 요청이 완료되는 데 걸리는 시간을 측정했으며, 코드 내에서 개별 요청은로드에 관계없이 같은 시간에 처리됩니다. 이것은 저에게 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

관련 문제