프로그래밍/C#

[C#] Devexpress GridControl DataSource 지연 로딩으로 속도 최적화하기

큐레이트 2025. 3. 24. 13:16

[DevExpress] GridControl DataSource 지연 로딩으로 속도 최적화하기

DevExpress의 GridControl / GridView에 데이터를 바인딩할 때, 바로 DataSource를 설정하면 폼 로딩 시 렉이 생기거나 UI가 멈추는 현상이 발생할 수 있습니다.

이 글에서는 지연 로딩(Delayed Binding)으로 GridView를 빠르게 보여주고, 데이터는 백그라운드에서 로딩하는 방법을 소개합니다.


✅ 1. 왜 DataSource를 바로 바인딩하면 느려질까?

GridControl은 DataSource를 설정하는 순간 데이터를 분석하고 렌더링을 시작합니다.
데이터가 많을수록 로딩 시간이 길어지며, 그 사이 UI가 멈추게 됩니다.
→ 이 현상은 특히 WinForms에서 폼 로드시 바로 바인딩할 때 자주 발생합니다.


✅ 2. Task.Run으로 백그라운드에서 데이터 로딩

폼은 먼저 뜨고, 데이터는 백그라운드에서 로딩한 후 GridView에 바인딩하는 방식이 사용자 경험(UX)을 훨씬 개선시킵니다.


private async void MainForm_Load(object sender, EventArgs e)
{
    gridView.BeginUpdate();
    gridControl.DataSource = null;
    gridView.EndUpdate();

    loadingLabel.Visible = true; // "로딩 중..." 표시

    var data = await Task.Run(() => GetDataFromDatabase());

    gridControl.DataSource = data;
    loadingLabel.Visible = false;
}

GetDataFromDatabase()는 시간이 오래 걸리는 DB 쿼리 또는 리스트 생성 함수입니다.


✅ 3. 로딩 중 표시 UI 간단 구현

폼에 Label 또는 ProgressPanel 등을 배치하여 로딩 중임을 사용자에게 안내하세요.


// 로딩 텍스트 설정
loadingLabel.Text = "데이터 로딩 중입니다...";
loadingLabel.Visible = true;

→ DevExpress라면 SplashScreenManager도 좋은 대안입니다.


✅ 4. BeginUpdate / EndUpdate 반드시 사용

GridView 바인딩 시에도 BeginUpdate(), EndUpdate()를 사용하면 불필요한 렌더링을 막고 성능이 향상됩니다.


gridView.BeginUpdate();
gridControl.DataSource = data;
gridView.EndUpdate();

🧠 마무리 팁

  • 폼 로드시 GridControl의 DataSource = null로 초기화
  • 데이터는 Task.Run으로 백그라운드에서 가져오기
  • 로딩 중임을 알려주는 UI 요소 표시
  • BeginUpdate / EndUpdate로 렌더링 성능 최적화

위 방법을 적용하면 대용량 데이터를 바인딩해도 화면 멈춤 없이 자연스럽게 로딩할 수 있습니다.
사용자 경험도 좋아지고, 개발자도 속이 편해지는 구조입니다 😊

도움이 되셨다면 공감 / 댓글 부탁드립니다!

 

반응형