2011-09-07 5 views
0

내가 작성한 LINQ-to-SQL 쿼리가 고통스럽게 느린 것으로 의심되어 어제 게시했습니다. 내가 뭘하는지는 내 쿼리의 결과를 반복하고 데이터 테이블을 구성하는 것입니다. 그런 다음 DataTable을 내 양식의 DataGridView에 바인딩합니다.DataGridView 다시 그리기시 느림

나는 쿼리가 느린 부분이라고 생각했지만,이 쿼리와 데이터 테이블 구성을 반증했다. DataGridView에서 DataSource 속성을 설정할 때 앱이 두 번째 또는 두 번 걸린다. 약 10 초 동안 매달려 그리드를 보여줍니다.

리플렉션을 사용하여 DGV에서 DoubleBuffered 속성을 설정하려고했지만 슬프게도 별다른 차이가 없었습니다. 다른 사람이 이런 문제를 경험 한 적이 있습니까?

EDIT : 그리드에 작은 행 (즉, 30-40)이있는 경우 해당 행을 처리합니다. 행 수가 수백 개에 도달하면 즉시 중단됩니다.

+3

유용 뭔가가있을 수 있습니다 : 예 그래서이 경우

DataLoadOptions options = new DataLoadOptions(); options.LoadWith<Customer>(Customer => Customer.Orders); db.LoadOptions = options; 

(이 각 고객에 대한 모든 주문을로드합니다), 당신은이 Linq2sql

vMore 정보에 의해 생성되는 조인 볼 수 있습니다 이 MSDN 항목 (Windows Forms DataGridView 컨트롤의 성능 조정) : http://msdn.microsoft.com/en-us/library/ms171621.aspx –

+1

한 번 DataGridView에서 매우 느린 DataGridView를 사용했습니다. 배경은 데이터 바인딩 중에 지연로드 된 참조가 트리거 되었기 때문에 발생합니다. 그런 일이 일어나지 않는다고 확신하는 경우 동일한 크기의 datatable을 생성하고 여전히 문제가 있는지 확인하는 것이 좋습니다. 문제가 지속되면 가상 모드를 구현해야합니다. –

+0

@David Hall : 게으른 로딩이 가능하며 datacontext에서 dataloadoptions로 해결할 수 있습니다. 내 대답보기 – Pleun

답변

0

생성 된 SQL을 추적합니다. 아마도 실제로는 각 행에 대해 하나 이상의 여분의 SQL 문을 초래하는 게으른로드입니다 (이것은 사용자가 설명하는 동작과 일치합니다).

datacontext에서 SQL을 기록하거나 SQL Server 프로파일 러를 사용하여 생성되는 sql을 볼 수 있습니다.

실제로 느린 로딩 인 경우 datacontext의 DataLoadOptions를 사용하여 기본 지연로드 동작을 무시할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx