2010-07-06 4 views
0

배경 : 나는 임의의 쿼리를 실행 한 다음 데이터를 가져옵니다 - 레코드 배열 = 개체 배열. 나는 DataGrid를 사용하여 그것들을보고 싶다.WPF DataGrid의 속도를 높이려면 어떻게해야합니까?

문제 : 그 응용 프로그램이 충분히 반응이 느껴지지 않습니다. 쿼리를 쿼리로 전환하는 속도가 느리며 전환하는 데 약 1-2 초가 걸리고 표시 할 레코드는 약 20 개뿐입니다! 나는 즉시 스위치를 만들고 싶습니다. "다음 쿼리"를 클릭하면 바로 결과를 얻을 수 있습니다.

코드 :

 // defining colums for a grid 
     grid.Columns.Clear(); 

     int i = 0; 
     foreach (var db_col in query.Names) // names of the colums 
     { 
      var col = new DataGridTextColumn(); 
      col.Header = db_col; 
      col.Binding = new Binding(String.Format("Data[{0}]",i)); 
      grid.Columns.Add(col); 
      ++i; 
     } 

     // adding rows to grid -- the culprit 
     grid.Items.Clear(); 

     foreach (var db_row in query.Rows) 
     { 
      var row = new DataGridRow(); 
      row.Item = db_row; 
      grid.Items.Add(row); 
     } 

내가 무엇을 내가 할 수있는 다른 방법으로 볼 수 없습니다 - I 행을 반복 내가 하나씩 추가합니다. 행이 이미 메모리에 있으므로이 시점에서 데이터베이스 통신이 없습니다. 이 (행 추가)이 속도 저하의 원인인지 어떻게 알 수 있습니까? 매우 간단하고, 나는 이것을 주석 처리하고 앱은 빠르게된다.

내 상자 : Windows 7 Ultimate 32 비트, CPU Intel Core2Duo 2.66GHz, 2GB RAM.

답변

1

BeginInit 및 EndInit를 호출하여 각 항목이 추가 된 후 그리드가 업데이트되는 것을 멈추려 했습니까?

grid.BeginInit(); 
grid.Items.Clear(); 

foreach (var db_row in query.Rows) 
{ 
    var row = new DataGridRow(); 
    row.Item = db_row; 
    grid.Items.Add(row); 
} 

grid.EndInit(); 
+0

고맙습니다. 지금도 그래 왔지만, 지연은 볼 수 있습니다. – greenoldman

관련 문제