본문 바로가기

.NET/C#

Task Parallel Library사용하여 데이터 로드하기


http://www.dotnetcurry.com/ShowArticle.aspx?ID=754
.NET 4.0에는 concurrency와 병렬처리를 할수 이는 API가 추가되었습니다. 이러한 API를 "
Task Parallel Library (TPL)"이라고 합니다. 그리고 이러한 API들은 System.Threading과System.Threading.Tasks네임스페이스에 있습니다. 아래의 테이블 같이 4.0에 병렬프로그램을 할수 있는 클래스들이 있습니다.

image

만약 병렬 수행에 초짜라면 다음 기사를 보시기 바랍니다. Introduction to .NET Parallel Task

여기서 WPF Application에서 WCF서비스에 접속하여 데이터들을 추출하는 과정을 다루고자 합니다. WPF Client Application는 Task 클래스를 써서 WCF service를 호출하는데 장시간 호출하는는데 목적을 둔다. 시나리오는 아래와 같다.

.NET Task Class

Step 1: VS2010열고 빈솔루션을 생성한다. 이름을 ‘CS_Task_Demo’ 한다. 이프로젝트에 WCF Service application project를 추가하고 이름을 ‘WCF40_DataService’라한다. 생선한 IService1.cs파일을 IService.cs로 이름을 변경하고 Service1.svc를  Service.svc로 변경한다.

Step 2: IService.cs위에 ServiceContract의 어트리뷰트를 주고 아래와 같이 코딩한다. OperationContract메서드에 WebGet Attribute를 추가함으로 WCF REST서비스가 된다.

image

Step 3 : Service 클래스에 아래와같이 작성한다. 여시거는 데이터베이스를 호출하여 Employee의 데이터를 가져온다.

image

Note:위의 코드는 Thread.Sleep(10000)을 사용하였는데 데이터베이스에서 데이터를 가져오는데 10초를 기다린다는 의미를 가진다. The above code uses the Thread.Sleep(10000) which waits for 10 seconds to get the data from the Database. 이러한 작업은 Task클래의 성능을 시험하기위함이다.

Step 4: Service.svc코드를 아래와같이 바꾼다.

WPF Parallel Task Service

Step 5: Web.Config파일에 WCF REST Service를 위한 WebHttpBinding을 추가한다.

<protocolMapping>

<add binding="webHttpBinding" scheme="http"/>

</protocolMapping>

Step 6: IIS에 WCF서비스를 퍼블리쉬한다.

Step 7:I 같은솔루션파일에 WPF프로젝트를 추가하고 이름을 ‘WPF40_TasksClass’로한다. 여기서 프레임워크는 4.0으로 했는지 확인을 하고 아래의 XAML코드를 추가한다.

WPF Parallel Task XAML

Step 8: MainPage.xaml.cs페이지를 열고 아래의 클래스를 추가한다.

image

Step 9:  GetData_Click이벤트에 다음의 코드를 삽입한다. 이코드는 WCF REST서비스를 비동기 호출하는 Task object를 생성합니다. 이것은 XML데이터를 WCF서비스로 부터 다운로드 받는 코드다. WCF 서비스를 호출하는동안 데이터페이스를 호출하는 작업이 병행된다. 서비스 호출이 끝나게 되면 가져온 데이터를 아래와 같이 처리한다.

WPF Parallel Task Data

Note: 위의 코드를 이해하기 위해 주석을 세심히 보기 바란다.

Step 10: ‘Get Data’버튼을 눌른다. 누름과 동시에 그리드에 데이터가 생성됨을 볼수 있을것이다. 이 데이터는 로컬 데이터베이스에서 채워진 데이터이다.

WPF Parallel Task Demo

OK를 클릭하고 잠시기다려봐라, 좀있으면 왼쪽그리드에 데이터가 채워짐을 볼수 있을것이다. 이번에는 채워진데이터들은 WCF REST서비스로 부터 가져온 데이터이다.

WPF Parallel Task Demo

와와같은 아웃풋으로 WCF는 10초이상이 걸리고 로컬 데이터 베이스는 0.2초정도 시간이 소요됨을 알수 있을것이다.

해석이 이상하다. 원본을 꼭 참고하길 바란다. 거기서 소스도 받을수 있다.