2009-06-17 5 views
2

웹 서비스, 데이터베이스, 파일 조회 등 여러 소스의 데이터를 집계하고 결과를보기로 전달하는 컨트롤러 작업이 있습니다. 따라서 페이지를 렌더링하려면 모든 작업이 완료되어야합니다. 현재는 순차적으로 수행되지만 독립적이므로 성능을 향상시킬 수 있으므로 병렬로 실행하는 것이 좋습니다.ASP.NET MVC 및 장기 실행 작업

그래서 이것을 달성하는 가장 좋은 방법은 무엇입니까? 각 작업마다 새 스레드를 시작하고 모든 작업이 완료되면 주 스레드를 차단 하시겠습니까? 스레드 풀에서 스레드를 사용하거나 수동으로 새 스레드를 생성해야합니까? 스레드 풀의 스레드를 사용하면 웹 서버가 새 요청을 처리 할 수 ​​없으므로 좋은 생각이 아닙니다. 새 스레드를 수동으로 생성하는 것은 비용이 많이들 수 있으므로 하루가 끝날 때 이러한 작업을 병행하거나 순차적으로 순차적으로 실행하여 성능이 순조롭게 향상됩니까?

+1

페이지를로드 한 후 사용자에게 요청이 처리되고 있음을 알리는 동안 AJAX 호출 (또는 호출?) 데이터를 검색하는 옵션이 있습니까? 사용자가 어떤 일이 일어나고 있고 그 요청이 곧 답변 될 것이라는 메시지가 나타나면 사용자는 기꺼이 더 오래 기다릴 것입니다 ... –

+0

버튼이 표시되어야하는 것과 같이 인터페이스가 이러한 작업에서 반환 된 결과에 의해 완전히 조건 지워지기 때문에 AJAX를 사용할 수 없습니다 , 볼 수있는 영역인지 아닌지를 나타냅니다. –

+0

아마도 비동기 컨트롤러가 도움이 될까요? 작업이 대부분 I/O 바운드 인 것처럼 들립니다. – bzlm

답변

1

자신의 스레드를 생성하거나 스레드 풀 스레드를 사용하는 경우에는 스레드 풀의 스레드를 사용하십시오. 스레드가 부족한 경우 풀에 더 많은 스레드를 허용하도록 서버 설정을 조정할 수 있습니다.

+0

@ Eric, 팁 주셔서 감사합니다, 그건 내 초기 추측이었습니다. –

0

마지막 질문에 답하는 유일한 방법은 실제로 개별 테스트를 수행하는 것입니다. 별도의 집계 작업이 얼마나 복잡한 지 알 수 없기 때문입니다. 반응 형 UI의 환상을주고 싶다면 항상 로딩 페이지를 표시하고 AJAX로 집계를 시작할 수 있습니다. 심지어 스레드가 아닌, 이것은 사용자를 충분히 placate 수 있습니다.

+0

현재 사용자는 불평하지 않고 있습니다. 최적화를 찾는 것은 개인적인 욕구의 문제 일뿐입니다. –