2014-04-22 3 views
0

데이터 그리드 (WPF/C#)가 있습니다. 이것은 상당히 큰 MySQL 뷰에서 두 개의 필드를 가져옵니다. 그러나 화면에 렌더링하는 데 너무 오래 걸리고 더 빠른 방법이 있는지 알고 싶습니까?DataGrid에 데이터를 너무 느리게 표시합니다.

private void SetupDataGrid() 
{ 
    try 
    { 
     _con.Open(); 
     var com = new MySqlCommand("SELECT `Record ID`, `Company Name` FROM tblTest.all;") { Connection = _con, CommandType = CommandType.Text }; 
     var dt = new DataTable(); 
     var sdt = new MySqlDataAdapter(com); 
     sdt.Fill(dt); 
     DataGridActivities.DataContext = dt; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
    _con.Close(); 
} 
+0

방법으로이 작업을 수행 할 수 있습니다? 레코드 집합을 필터링하십시오. 그리드를 보이지 않게 한 다음 한 번 경계에 표시하도록 설정 했습니까? –

+0

처음 렌더링하는 데 많은 시간이 걸리거나 스크롤 할 때 문제가 있습니까? – Andy

+0

처음으로 모든 것을 표시하는 데 약 5/6 초가 소요됩니다 (그리고 나서 모든 레코드를 사용할 수 있습니다). – AndyDB

답변

2

그리드에 페이징을 도입 할 수 있으며 표시하려는 레코드 만 데이터베이스에서 추출 할 수 있습니다. 또 다른 방법은 데이터를 추출하여 캐시하고 캐시에 액세스하는 것입니다. 그러나이 경우 처음으로 라운드가 느려질 수 있습니다.

큰 데이터 세트를 추출하는 것이 문제가되는 경우 현재 페이지의 항목 만 추출하는 것이 좋습니다. MySQL과

당신은 효율적인있는 모든 기록을 표시하지에 대한 다음과 같은 방법

SELECT * FROM [TABLE] LIMIT 5,10; 
+0

고마워요 - 난 그냥 최악의 시나리오 (매개 변수 기반 쿼리를 사용하여 필터링됩니다)로 이것을 사용하고 있습니다. 그러나 VS에 새로운 WPF/XAML 기능이있어 데이터의 첫 번째 청크를 그리드로 반환 한 다음 필요에 따라 나머지 부분을 처리함으로써 속도가 빨라진다는 것을 알았습니다. – AndyDB

+0

예 대용량 데이터 집합을 그리드에로드하고 바인딩 할 때 가장 좋은 방법이라고 생각합니다. 내 대답을 예제로 업데이트했습니다. – Mez

+0

그건 정말 유용합니다. 스티븐 - 고마워요. 그러나 도움이 될 새로운 DataGrid 명령이 있다고 확신합니다. – AndyDB

0

어느 부분이 속도가 느려 집니까? SQL 쿼리 시간을 정해 봤어?

이런 식으로 MySQL을 사용한 적이 없지만 일반적인 최적화 기술은 stored proceduresindexes입니다.

같은 페이지에 모든 레코드를 정말로 표시하고 싶지 않으면 adding pagination in your query을 고려해야합니다.

관련 문제