티스토리 뷰
WCF RIA Service 3 (Gradual Loading) by Silverlight 4
kaki104 2012. 1. 5. 00:06간단하게 한가지만 추가할려고 한다.
대량의 데이터를 한번에 불러오는 경우 불러오는데 시간이 오래 걸리고, 그 데이터가 불러오기 전까지는 화면에 출력되는 내용이 없다. 그래서, 주로 사용하는 방식이 페이징 방식인데.. 페이징 방식의 경우에는 모든 데이터를 한번에 볼 수 없기 때문에..울나라 사람들이 조아하는 엑셀로 한방에 출력하기시에 문제가 있다..
그런 문제의 해답으로 점진적 로드 방식이 있는데, 한번에 20-40개 정도의 로우만을 여러번 불러오는 것이다. 그럼 일단 화면에 데이터가 출력되어있기 때문에 프로그램이 느리다는 이야기는 듣지 않을 것이고, 좀 시간을 두고 기다리면 모든 데이터가 어느세 꽉~ 차고, 마음도 한결 가벼워 질 것이다.
1. DomainService1.cs 수정
일단 WCF RIA에 함수를 하나 추가한다. 조건을 인수로 받아서 해당대는 데이터를 ID 순으로 소트해서 반환하는 함수이다.
여기서 중요한 사항은 꼭 orderby문이 포함되어 있어야 한다는 것이다.
//날짜를 인수로 받아서 해당 조건에 만족하는 데이터만 반환한다.
public IQueryable<Order> GetOrders_By_Condition(DateTime FromDate, DateTime ToDate)
{
var query = from order in this.ObjectContext.Orders
where order.Order_Date >= FromDate && order.Order_Date <= ToDate
orderby order.Order_ID
select order;
return query.AsQueryable();
}
작성이 완료되었으면 웹 프로젝트를 빌드한다. 빌드를 해줘야 추가된 함수를 실버라이트에서 사용 할 수 있다.
2. SL4_RIA_Sample 프로젝트에 Silverlight User Control을 하나 추가한다.
이름은 Orders.xaml로 한다.
Data Sources 메뉴를 클릭한다.
Order에 콤보박스 다운 버튼을 클릭하면 위와 같이 나온다.(한번에 앙나오면 다시 컴파일 하고 다시 열어본다) 여기서 GetOrders_By_ConditionQuery를 선택하고 드레그 드롭으로 Orders.xaml에 컨트롤을 만들고, 약간의 작업을 더해주어 아래와 같은 화면을 만든다.
일단 컨트롤을 만들어서 화면에 출력될 수 있는 기본은 만들었고, 실버라이트가 시작되었을 때 맨 처음으로 이 화면을 사용하도록 수정한다.
App.xaml.cs
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new Orders();
}
실행해보자
데이터가 1991년 부터 1995년까지 있기 때문에..1년간의 날짜를 입력한 후 Load버튼을 눌러서 조회를 해봤다.
모든 데이터가 한번에 쫘악 펼쳐지며 보인다. 아주 만은 데이터는 아니라서 빠르게 표시가 된다. 그러나 날자를 1995년까지로 변경하고 조회하면 처음에 화면 뜨는 속도가 무척 느리다는 것을 알 수 있다.
3. 점진적 로드 방식으로 변경
Orders.xaml
//WCF RIA Service 데이터 컬렉션을 로드, 필터링, 그룹화 및 정렬하기 위한 개체
//http://msdn.microsoft.com/ko-kr/library/system.windows.controls.domaindatasource_members(v=vs.91).aspx
<riaControls:DomainDataSource AutoLoad="False"
d:DesignData="{d:DesignInstance my:Order, CreateList=true}" Height="0"
LoadedData="orderDomainDataSource_LoadedData"
Name="orderDomainDataSource" LoadSize="40" LoadInterval="00:00:04"
QueryName="GetOrders_By_ConditionQuery"
Width="0" Margin="0,0,400,29">
<riaControls:DomainDataSource.DomainContext>
<my:DomainService1 />
</riaControls:DomainDataSource.DomainContext>
<riaControls:DomainDataSource.QueryParameters>
<riaControls:Parameter ParameterName="FromDate" Value="{Binding ElementName=fromDateTextBox, Path=Text}" />
<riaControls:Parameter ParameterName="ToDate" Value="{Binding ElementName=toDateTextBox, Path=Text}" />
</riaControls:DomainDataSource.QueryParameters>
</riaControls:DomainDataSource>
위의 LoadSize와 LoadInterval을 이용하면 한번에 몇개씩 몇 초후에 가지고 오는 지를 지정해서 순서대로 데이터를 가지고 올 수 있다.
(시작 - 스크롤 바의 크기를 보면 된다.)
(로딩 중 - 스크롤 바의 크기가 줄어 들었다)
4. WCF로 전송되는 데이터량 늘리기
한번에 전송되는 양이 생각보다 적어서, 좀더 늘릴 필요가 있을 때 사용한다.
Web.config
<system.serviceModel>
<domainServices>
<endpoints>
<add name="OData" type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</endpoints>
</domainServices>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
<dataContractSerializer maxItemsInObjectGraph="655360" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
5. 실버라이트는
스트림라인드 오퍼레이션이 기본이기 때문에, 모든 데이터를 한번에 다 불러와야 보여지는 그런 화면은 좋은 화면이 아니다. 개발시에는 꼭 참고 하기 바란다. 그리고, 추가 강의 요청이 없어서..그냥 생각 날때 마다 하나씩 올려 놓을려고 한다.(요청은 환영)
'Previous Platforms > WCF RIA Service' 카테고리의 다른 글
WCF RIA Service 6 (ComboBox Binding) by Silverlight 4 (0) | 2012.01.05 |
---|---|
WCF RIA Service 5 (Image Upload by Domain Service) by Silverlight 4 (0) | 2012.01.05 |
WCF RIA Service 4 (Web Cam Use) by Silverlight 4 (0) | 2012.01.05 |
WCF RIA Service 2 (CRUD) by Silverlight 4 (0) | 2012.01.04 |
WCF RIA Service 1 by Silverlight 4 (0) | 2012.01.04 |
- Total
- Today
- Yesterday
- MVVM
- Behavior
- #prism
- Build 2016
- UWP
- Visual Studio 2022
- Microsoft
- LINQ
- #Windows Template Studio
- ef core
- uno platform
- Cross-platform
- Windows 10
- ComboBox
- C#
- .net 5.0
- dotNETconf
- kiosk
- Always Encrypted
- PRISM
- uno-platform
- Bot Framework
- IOT
- XAML
- windows 11
- visual studio 2019
- #uwp
- WPF
- #MVVM
- .net
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |