일반 JSON 데이터 소스에서 수백만 개의 행을 .NET 응용 프로그램에 로드하는 방법
페이지 정보
작성자 GrapeCity 작성일 2022-11-08 09:30 조회 384회 댓글 0건본문
관련링크
는 ADO.NET 기반의 서비스 컴포넌트로 효율적인 데이터 커뮤니케이션을 위해 다양한 데이터 소스에 액세스할 수 있는 통합된 인터페이스를 제공합니다. 이는 데이터 기반 응용 프로그램을 개발하는 데 필요한 시간을 줄여줍니다. 요즘에는 응용 프로그램을 바인딩하는 데 JSON 데이터 소스를 점점 더 흔히 사용하고 있으며 GrapeCity에서는 ADO.NET 또는 EntityFramework Core를 사용하여 JSON 데이터에 쉽게 액세스할 수 있는 를 제공합니다. 이는 JSON 데이터 작업 프로세스를 간소화하며 플랫 및 관계형 JSON 데이터 모두를 쿼리하는 기능을 제공합니다.
일반적으로 JSON에 수많은 레코드가 있다면(예: 수백만 개) 반복하여 데이터를 할당하는 데 시간이 꽤 걸리지만 JSON DataConnector를 사용하면 수 초 내에 많은 데이터를 로드할 수 있으며 현재 이 기능은 을 사용해서만 가능합니다.
이 블로그에서는 JSON용 ADO.NET Provider를 사용하여 수백만 개의 레코드를 에 매우 빠르게 로드하는 방법에 대해 알아볼 것이며 4백만 개의 레코드가 있는 직원의 데이터를 사용할 것입니다. 구현 단계는 다음과 같이 분류됩니다.
아래 링크를 통해 지금 바로 ComponentOne을 다운로드한 후, 아래 내용을 따라해 보세요!
필수 패키지로 새 WinForms 응용 프로그램 설정
Visual Studio 2022를 사용하여 새 .NET 6 WinForms 응용 프로그램을 만들고 다음 패키지를 프로젝트에 추가합니다.
참고: 여기에서는 MaterialDark 테마를 적용하여 향상된 디자인을 제공하도록 FlexGrid의 클래스를 사용합니다.
응용 프로그램 설정 방법을 단계별로 표현하는 다음 스크린샷을 확인해주시기 바랍니다.
단계
1단계
2단계
3단계
4단계
5단계
6단계
JSON 데이터로 필드를 매핑하도록 사용자 정의 데이터 클래스 만들기
Data라는 새 사용자 정의 데이터 클래스를 만듭니다. 이는 JSON에서 스키마에 따라 , 인터페이스를 구현하며 JSON 데이터 소스에서 강력한 형식이 지정된 레코드를 가져오도록 일반적인 클래스 C1AdoNetCursorDataCollection<class>에서 사용합니다.
internal class Data : INotifyPropertyChanged, IEditableObject { // Fields private string index; private string firstName; private string lastName; private bool isActive; private string salary; private string age; private string gender; private string company; private string email; private string phone; private string address; [DataMember(Name = "index")] public string Index { get => index; set { if (index != value) { index = value; OnPropertyChanged(); } } } [DataMember(Name = "firstName")] public string FirstName { get => firstName; set { if (firstName != value) { firstName = value; OnPropertyChanged(); } } } [DataMember(Name = "lastname")] public string Lastname { get => lastName; set { if (lastName != value) { lastName = value; OnPropertyChanged(); } } } [DataMember(Name = "salary")] public string Salary { get => salary; set { if (salary != value) { salary = value; OnPropertyChanged(); } } } [DataMember(Name = "age")] public string Age { get => age; set { if (age != value) { age = value; OnPropertyChanged(); } } } [DataMember(Name = "gender")] public string Gender { get => gender; set { if (gender != value) { gender = value; OnPropertyChanged(); } } } [DataMember(Name = "company")] public string Company { get => company; set { if (company != value) { company = value; OnPropertyChanged(); } } } [DataMember(Name = "email")] public string Email { get => email; set { if (email != value) { email = value; OnPropertyChanged(); } } } [DataMember(Name = "phone")] public string Phone { get => phone; set { if (phone != value) { phone = value; OnPropertyChanged(); } } } [DataMember(Name = "address")] public string Address { get => address; set { if (address != value) { address = value; OnPropertyChanged(); } } } [DataMember(Name = "isActive")] public bool IsActive { get => isActive; set { if (isActive != value) { isActive = value; OnPropertyChanged(); } } } // INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged([CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } protected void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChanged?.Invoke(this, e); } // IEditableObject Members private Data _clone; public void BeginEdit() { _clone = (Data)MemberwiseClone(); } public void CancelEdit() { if (_clone != null) { foreach (var p in GetType().GetRuntimeProperties()) { if (p.CanRead && p.CanWrite) { p.SetValue(this, p.GetValue(_clone, null), null); } } } } public void EndEdit() { _clone = null; } }
JSON Datasource에 FlexGrid에 바인딩
마지막 단계에서는 에서 제안된 대로 JSON 데이터와의 연결을 빌드하고 FlexGrid의 인스턴스에 바인딩하도록 C1DataCollectionBindingList에서 CursorDataCollection 객체를 래핑해야 합니다.
C1AdoNetCursorDataCollection<Data> dataCollection; string documentConnectionString = $"Data Model=Document;Uri=" + @"..\..\..\4mData.json" + ";Json Path='$.employees';Max Page Size=1000"; var conn = new C1JsonConnection(documentConnectionString); dataCollection = new C1AdoNetCursorDataCollection<Data>(conn, "employees"); await dataCollection.LoadMoreItemsAsync();
여기에서는 데이터를 로드하도록 LoadOnDemand 기능을 사용하므로 아래 제공된 대로 FlexGrid의 이벤트를 처리하여 사용자가 마지막 표시 가능한 행으로 스크롤하는 즉시 데이터를 비동기적으로 로드해야 합니다.
c1FlexGrid1.AfterScroll += C1FlexGrid1_AfterScroll; private void C1FlexGrid1_AfterScroll(object sender, C1.Win.FlexGrid.RangeEventArgs e) { if (e.NewRange.BottomRow == c1FlexGrid1.Rows.Count - 1) { _ = dataCollection.LoadMoreItemsAsync(); } }
위에 제공된 모든 단계를 구현한 후 마지막 응용 프로그램은 아래 GIF에 표시된 대로 작동합니다.
JSON용 ADO.NET Provider를 사용하여 대용량 데이터 응용 프로그램을 만드는 이 데모가 마음에 드셨으면 좋겠습니다. 샘플은 여기에서 다운로드할 수 있습니다.
지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.