! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

WinForms용 FlexGrid의 .NET 8 DataGrid 성능 벤치마크 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

WinForms용 FlexGrid의 .NET 8 DataGrid 성능 벤치마크

페이지 정보

작성자 MESCIUS 작성일 2024-05-07 16:03 조회 18회 댓글 1건

본문

첨부파일

 빠른 시작 가이드

 필요한 항목

Visual Studio 2022, ComponentOne WinForms Edition, BenchmarkDotNet + BenchmarkDotNet 0.13.12 

 참조 컨트롤

 WinForms용 FlexGrid + C1.Win.FlexGrid 8.0.20233.636문서

 자습서 개념

 .NET 8 WinForms DataGrid 성능 - WinForms 응용 프로그램의 .NET 버전 6과 8에서 FlexGrid, .NET DataGrid 컨트롤의 성능 차이를 보여 줍니다.


최근 .NET 8이 릴리스되면서, 과연 이 업그레이드에 비용을 들일 가치가 있는지 궁금하신 분들이 계실 수도 있습니다.
이번 블로그에서, .NET 6 버전과 비교하여 .NET 8용 WinForms DataGrid 컨트롤, FlexGrid의 강력한 성능을 살펴봅시다.


.NET 8 성능 개선  


.NET 8은 이전 버전과 유사한 JIT(Just In Time) 컴파일러를 사용하지만, 코드를 더 빠르게 처리하고 프로세스 실행 시간이 역시 더욱 짧습니다.


메모리 제한을 동적으로 조정할 수 있게 함으로써 가비지 수집기 성능 역시 향상되었습니다. 이는 수요에 따라 리소스 규모를 조정해야 하는 클라우드 솔루션에 가장 유용합니다.


.NET 응용 프로그램을 업그레이드해야 하는 가장 큰 이유는 일반적으로 성능이지만, Microsoft는 .NET의 각 버전의 성능을 제한하고 있습니다.


이것이 .NET 플랫폼으로 마이그레이션해야 하는 가장 큰 이유입니다.



.NET 8에서 성능을 측정하는 방법 


널리 사용되는 BenchmarkDotNet 도구는 .NET 코드의 성능을 간단히 측정할 수 있습니다.


시간과 메모리 할당을 측정할 뿐만 아니라, 다양한 벤치마크 테스트와 함께 .NET의 여러 버전을 비교할 수도 있습니다. 또한 행과 열의 수와 같은 매개 변수도 사용할 수 있습니다. 단일 보고서로 모든 결과를 실행하고 출력합니다.


이전 블로그인 .NET 5와 .NET Framework 컨트롤 간의 성능을 비교하는 방법에서 BenchmarkDotNet을 구성하는 방법에 대해 더 자세히 알아볼 수 있습니다.


아래의 경우, .NET 8과 비교해 WinForms .NET 6용 FlexGrid를 테스트합니다. 이 둘은 모두 장기 지원 버전으로, 20개의 열과 행의 범위가 10,000에서 100만인 데이터를 생성하는 것을 테스트 해보겠습니다.


이제 아래에서 결과를 함께 확인해 보겠습니다!



.NET 8용 FlexGrid 벤치마크 결과 


FlexGrid는 메시어스의 강력한 교체 플랫폼 .NET DataGrid로, WinForms, WPF, WinUI, UWP, Xamarin, ASP.NET Core, 그리고 심지어 MAUI에서도 지원됩니다.


WinForms FlexGrid에 대해 다음 벤치마크가 수행됩니다.


  • DataGrid 칠하기

  • DataGrid에 데이터 할당

  • 열 필터링

  • 열 정렬

  • 열 그룹화

  • 열 크기 자동 조정



벤치마크: DataGrid 그리기


그리기 벤치마크는 컨트롤을 그리는 데 사용하는 시간과 메모리를 측정합니다.

이는 Refresh 메서드로 호출할 수 있습니다.

_flexGrid.Refresh();


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

10,000

 84.555

82.025 

 359.77

 363.96

100,000 

 91.157

82.288

 359.77

 363.96

1,000,000

 80.506

77.072

 359.77

 363.96



 

할당된 그리기 시간과 메모리는 .NET 버전이나 행 수와 상관없이 거의 동일합니다. 이는 DataGrid는 표시 가능한 행만 그리기 때문입니다.


데이터 그리드를 단순히 그리는 것에서 .NET 8 버전은 단지 3~10% 빠릅니다. 



벤치마크: DataGrid에 데이터 할당 


이 벤치마크는 데이터 소스와 데이터가 매핑된 열을 설정합니다.

데이터는 벤치마크 테스트의 외부에 생성됩니다.

_flexGrid.DataSource = _data.DataTable;
_flexGrid.Cols[columnIndex].DataMap = _data.DataMaps[dataMapIndex];


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

10,000

11.945

12.096

1583.77

1583.7

100,000 

63.697

55.059

14943.13

14943.09

1,000,000

604.41

590.135

148537.49

148537.24


 


더 큰 데이터 소스를 할당하는 데 더 많은 메모리와 시간이 사용되었지만, .NET 6과 .NET 8간 그다지 차이가 없습니다.


데이터 할당에 있어서 .NET 8 버전은 단지 2~13% 빠릅니다. 



벤치마크: 열 필터링 


필터링 벤치마크는 다음 테스트 코드를 사용해 두 개의 조건부 필터를 생성하고 적용합니다.

_flexGrid.AllowFiltering = true;
ConditionFilter conditionFilter = (_flexGrid.Cols[_flexGrid.Cols.Fixed].Filter as ColumnFilter).ConditionFilter;

Condition condition1 = conditionFilter.Condition1;
condition1.Operator = ConditionOperator.GreaterThan;
condition1.Parameter = _condition1Parameter;

Condition condition2 = conditionFilter.Condition2;
condition2.Operator = ConditionOperator.LessThan;
condition2.Parameter = _condition2Parameter;

_flexGrid.ApplyFilters();


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

10,000

20.476

17.45

939

939.02

100,000 

167.649

118.522

9376.5

9376.52

1,000,000

1356.267

1066.629

93751.5

93751.52


 


열 필터링에 있어서 .NET 8 버전이 15~21% 더 빠른 것을 확인해 보세요!



벤치마크: 열 정렬 


정렬 벤치마크FlexGrid의 정렬 메서드를 사용하여 단일 열을 정렬합니다.

_flexGrid.Sort(SortFlags.Ascending, 1);


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

10,000

10.755

9.566

614.41

614.23

100,000 

166.266

159.876

6144.84

6144.66

1,000,000

2959.98

2968.626

63296

63295.82


 

백만 행의 경우 .NET 6과 .NET 8간 극적인 개선은 없습니다.

하지만, .NET 8 버전은 중소형 데이터 소스의 경우 4~11% 더 빠릅니다.



벤치마크: 열 그룹화 


그룹화 벤치마크그룹 설명자를 FlexGrid에 추가하여 단일 열을 그룹화합니다.

_flexGrid.GroupDescriptions = new List<GroupDescription>()
{
    new GroupDescription(_flexGrid.Cols[_firstDataMapColumnIndex].Name, ListSortDirection.Ascending)
};


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

10,000

89.

9.566

1935.67

1935.59

100,000 

166.266

779.149

13091.7

13091.39

1,000,000

2959.98

8577.146

126493.31

126493.23


 

데이터 소스가 클수록, .NET 8에서 더 많은 시간을 확보할 수 있습니다.


하지만, 더 작은 데이터 집합의 경우, 성능 향상의 비율이 더 높습니다. (100만 행의 경우 18%, 1만 행의 경우 31%)



벤치마크: 열 크기 자동 조정 


내용에 맞도록 열의 크기를 자동으로 조정하는 것은 비싼 기능이지만, 때때로 성능 비용의 가치가 있습니다.


이 벤치마크는 서로 다른 열 개수에 대해 측정된 10,000개의 기본 행을 사용합니다.

_flexGrid.AutoSizeCols();


결과:

 행수

 평균 시간(ms)

 할당된 메모리(KB)

 

 .NET 6

 .NET 8

 .NET 6

 .NET 8

20

1033.5

871.4

135.34

130.76

50

2508

2251.1

333.09

322.03

100

5226.4

4400

663.41

641.67

200

10682.3

8574.7

1327.88

1284.39


 

.NET 8 버전이 모든 데이터 원본 크기에 대해 해당 작업을 더 빠르게 수행하고, 더 나은 메모리 할당을 제공하는 것을 확인해 보세요!


열 크기 자동 조정에서 .NET8은 약 15~20% 개선됩니다.



.NET 8 벤치마크 결론 


메모리 할당은 .NET 6과 .NET 8 간 서로 비슷하지만, 이 벤치마크는 .NET 8이 다양한 DataGrid 작업을 수행하는 데에 더 빠른 실행 시간이 제공합니다.

  • DataGrid를 그리는 것은 3~10% 더 빠름

  • 데이터 할당은 2~13% 더 빠름

  • 열 필터링은 15~21% 더 빠름

  • 열 정렬은 4~11% 더 빠름

  • 열 그룹화는 18~31% 더 빠름

  • 열 자동 크기 조정은 15~20% 더 빠름


전반적으로 .NET 8은 사용하는 기능과 데이터 소스의 크기에 따라 .NET 6보다 2~31% 더 빠릅니다.



벤치마크를 직접 테스트하는 방법 


직접 벤치마크를 테스트하려면 샘플을 다운로드합니다.

실행하는 데 오랜 시간이 소요될 수 있으므로, 실행 전에 음 팁을 따르는 것이 좋습니다.


첨부된 샘플을 개발자 명령 프롬프트에서 다음 명령을 사용하여 실행할 수 있습니다.

dotnet run -c Release -f net6.0-windows --project FlexGridBenchmark8 --runtimes net6.0-windows net8.0-windows --filter **


또한, 명령으로 실행할 테스트를 미세 조정하거나, 벤치마크 폴더에서 다양한 클래스 파일을 제외하여 실행할 테스트를 조절할 수 있습니다!



 


지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.