2012-08-16 5 views
0

DataGridview를 사용하여 앱에서 큰 지연이 발생했습니다. 매초마다 상태 메시지로 업데이트해야하는데, 약 3000 개의 행이 DataGridview에 있습니다.매초마다 DataGridView 업데이트

나는 현재 갱신에 사용하는 코드는 다음과 같습니다

private void UpdateProxies() 
    { 
     Invoke(new MethodInvoker(
         delegate 
         { 
          this.dgvProxies.DoubleBuffered(true); 
          this.dgvProxies.SuspendLayout(); 
          this.dgvProxies.DataSource = null; 
          this.dgvProxies.DataSource = this.Proxies; 
          this.dgvProxies.ResumeLayout(); 
          this.dgvProxies.Refresh(); 
         } 
         )); 
    } 

나는 이중 버퍼링을 자동 크기 속성을 제거하고 수 있도록 노력했다 .. 여전히 매우는 랙이

어떤 아이디어를 내가 그것을 속도를 높일 수있는 방법 쪽으로?

+0

데이터 소스의 개체를 업데이트 할 수 있습니까? 아니면 언제든지 데이터 원본을 삭제하고 다시 만들어야합니까? 업데이트 할 수 있다면 INotifyPropertyChanged를 사용할 수 있고 그리드는 모든 것을 재 바인딩하지 않고 필요한 셀을 업데이트합니다. 컬렉션 자체에서도 ObservableCollection을 사용할 수 있으며 필요에 따라 DataGrid가 변경 내용을 처리해야합니다. – Belmiris

+1

사용자가 볼 수있는 행만 업데이트하십시오. – LarsTech

답변

0

나는 이런 식으로하는 것이 불가능하다고 생각합니다. 3k 행은 엄청난 양의 작업입니다. 나는 당신이 변화하는 접근 방식을 시도하는 것이 좋습니다.

  • 현재 사용자가보고있는 행과 스크롤 할 수있는 버퍼 만 표시합니다. 사용자가 스크롤 할 때 동적로드를 만듭니다.
  • 델타 업데이트를하십시오. 데이터 변경 사항을 감지하고 새 행을 추가하거나 삽입하거나 데이터 변경 사항에 따라 수행해야하는 작업을 삭제하거나 수행하십시오. 모든 데이터를 datagridview에 바인드하지 마십시오.
+0

사용자가보고있는 데이터 만 표시하는 솔루션을 어떻게 구현합니까? 그런 다음 스크롤 할 때 업데이트하십시오. – gwenda

+0

데이터의 일부만 바인딩 할 수 있습니다. 임시 수집을하십시오. OnScroll 이벤트가 있습니다. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.onscroll.aspx. 당신은 그것을 연결하고 쌍으로 데이터를 선택하여 스크롤 할 수 있습니다. – dantix

관련 문제