2010-06-08 3 views
0

각 aspx 페이지 (DropDownLists)의 컨트롤이 SQLDataSource에 바인딩되어 있습니다.ASPX SQLDataSources에서 컨트롤로드 CONCURRENTLY

저장된 proc 파일은 실행하는 데 오랜 시간이 걸립니다. 나는 그들을 가속화하기 위해 DBA와 몇 주 동안 함께 노력해 왔습니다. 가장 느린 것의 경우 약 1-2 초가 걸렸습니다. 그러나 이러한 페이지 중 여덟 개를로드하는 것은 사용자가 대기하기에는 너무 길다!

따라서 이러한 컨트롤을 연속적으로로드하는 대신 동시에로드하는 방법이 있는지 알고 싶습니다.

SSMS에서 느린 procs 32 개를 실행했고 38 초가 걸렸습니다. SSMS에서 32 개의 procs를 동시에 4 세트 나 실행했으며 42-43 초가 걸렸습니다. 그래서 proc마다 1.19 초에서 proc. 당 34 초로 바뀌었다. aspx.net 웹 페이지에서 이와 동일한 방법론을 사용하고 싶습니다.

요약 : SQL 데이터 원본을 연속적으로로드하는 대신 동시에로드 할 수 있습니까?

EDIT : C# 코드에서 DataBind를 수동으로 호출하는 대신 자동으로 호출 할 수 있습니까? DataBind를 호출 할 때마다 새로운 thred를 시작할 수 있습니다 ... 이 작업이 가능합니까?

+0

데이터가 자주/가끔/결코 변하지 않는다? –

+0

자주 있습니다. 매번로드 할 때와 마찬가지로로드 요청을받습니다. – kralco626

답변

1

당신은 비동기 페이지 또는 비동기 ADO.NET 보라 : 콤보에 http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

+0

이것은 나에게 들러 보입니다. 같은 시간에 너무 많은 사용자가 웹 사이트에 액세스하는 훌륭한 솔루션이 될 수 있습니다.그러나 데이터가 가져 오는 동안 thred 풀에 thred가 반환 되더라도 이전 데이터 가져 오기가 완료 될 때까지 웹 페이지가 새로운 thred를 생성하지 않고 다음 컨트롤에 대한 데이터를 가져 오지 않는 것으로 보입니다. 그것은 다른 사용자가 페이지를로드하는 데 사용되는 thred 수 있지만 페이지를 비동기 적으로 동일한 페이지에서 둘 이상의 컨트롤에 대한 데이터를로드 할 수 있도록 않는 것 ... 문서를 잘못 해석 할 수 있습니다 .. – kralco626

+0

글쎄, 기사의 처음 9/10을 읽었는데 마지막 1/10은 읽지 않았다. "RegisterAsyncTask의 가장 큰 이점은 비동기 페이지가 여러 비동기 호출을 시작하고 렌더링이 지연 될 때까지 렌더링을 지연 할 수 있다는 것입니다. 전화가 완료되었습니다. " 이것이 내가 원하는 것인지 아닌지는 모르겠지만, 모든 것을 시도해보십시오. – kralco626

+0

@ kralco626 - 예, 모든 요청을 시작한 다음 완료 될 때까지 처리하려고합니다. 나는 이것을 ASP.NET (또는 모든 환경에서 자동 데이터 바인딩)에서 시도하지 않았지만 2007 년 TechEd에서 광범위한 데모를 보았습니다. 현재 비동기 ADO.NET을 WinForms 응용 프로그램 (완전 수동 제어 바인딩)에서 사용합니다. 그러나 사용하기가 비교적 쉽고 훌륭합니다. –

1

여기 캐싱이 더 나은 해결책 일 수 있습니다. 또한 동일한 절차에서 여러 결과 집합을 사용합니다.

+0

로드중인 데이터가 변경되어 캐싱 할 수 없습니다. 사용자가 드롭 다운에서 옵션을 선택할 때마다 페이지가 게시되고 드롭 다운에 대한 모든 SQL 데이터 소스는 다른 모든 드롭 다운의 선택된 값을 보는 proc를 호출합니다. 그것은 복잡합니다. 짧은 이야기는 오랜 시간이 걸린다는 것입니다. 난 그 가능성을 .net 그 다음 하나를로드하기 전에 하나의 SQL 데이터 소스를 기다리지 않도록 강제로 궁금 해서요 ... – kralco626

+0

@ kralco626 - ViewState를 사용하여 해당 저장 프로 시저를 다시 호출하지 않도록 할 수있는 것 같습니다. 모든 포스트 백마다. 실제로, 그러나 당신이 그것을 슬라이스 여기에 최고의 솔루션은 DB에 여행의 수를 줄이기 위해 처음에 있습니다. –

+0

동의. 그러나 실제로 웹 사이트의 기능을 감소시키지 않으면 서 데이터베이스로의 이동 횟수를 제한 할 수있는 방법이 없습니다. – kralco626

0

드롭 다운 콤보 정보로드를 위해 jquery/ajax/httphandlers (또는 페이지에 [webmethod]로 표시된 메소드)/json을 사용할 수 있습니다. 이를 통해 병렬로 쿼리 할 수 ​​있으며 훨씬 더 반응이 빠른 인터페이스를 사용할 수 있습니다.

더 많은 개발 작업을 수행 할 수 있지만 성능은 향상되고 인터페이스는 더 잘 제어 할 수 있습니다.

+0

일명 수동으로 작업을 수행하고 데이터베이스를 동시에 호출 할 수 있습니까? 나는 이것에 대해 생각해 보았고 추가 작업을하지 않기를 정말로 바랬다. databind()를 C# 코드에서 호출하는 것이 아니라 자동으로 수행하는 것이 좋습니까? 그리고 databind()를 호출 할 때마다 새로운 thred를 연다 ??? – kralco626

+0

물론 멀티 스레딩도 사용할 수 있습니다. 추가 개발 작업도 :-) –

+0

어쩌면 내가 시도 할 것입니다. 컨트롤을 aspx 대신 C#에서 SqlDataSource를 할당 한 다음 별도의 threds에있는 모든 Control.DataSource 메서드를 호출하는 메서드를 가질 수 있습니다 ... 내가 알려 드리겠습니다 ... – kralco626

관련 문제