2011-06-14 4 views
0

저는 기존 WinForms 프로젝트를 개선하기 위해 노력하고 있습니다. 저는 지금 아이디어를 얻지 못하고 있습니다. 그래서 나는 여기에 몇 가지 세부 사항을 흘려서 사람들이 제안 할 수있는 것을 보았습니다.WinForms 성능 사례 : 동적 양식 만들기 + 바인딩

형태는 다음과 같이 작동

우리는 정규화 된 네임 스페이스를 사용하여 컨트롤을 만들 수있는 정의 (A DB에서받은) 목록을 가지고있다. 컨트롤 (usercontrols, 기본적으로)은 리플렉션에 의해 차례로 생성되고 최종적으로 폼의 패널에 추가됩니다. 이제 각 컨트롤은 결국 컨트롤의 트리와 같은 계층 구조로 더 많이 포함 할 수 있습니다.

각 컨트롤은 고유 한 초기화를 가지며 결국 DataSet은 데이터 소스로 폼 (및 모든 컨트롤)에 으로 지정되고 각각에 데이터 바인딩이 추가되고 발생합니다.

특히, DataTable/Set 대신 특정 ROW를 컨트롤에 바인딩하는 경우가 있습니다. 그래서 약 ~ 30 사용자 컨트롤로 등 BindingManager 위치가 정확한 행을 결정하기 위해 호출

을 기대, 우리는 새로운 형태의 데이터 집합 거의 모든 데이터를 포함 를 열고 약 10 초 사랑스러운 성능을 얻을. 바인딩은 약 3-4 초가 걸립니다.

복잡한 데이터 상태에서 약 30-40 초의 여는 시간, 약의 약 바인딩 시간이 소요됩니다.

이제 매우 간단 해졌습니다. 우리는 코드가 많아서 속도가 느려지므로 으로 생각하고 일부 명소를 알기 위해 프로파일을 작성했습니다.

그러나 성능의 주된 문제는 바인딩 인 것 같습니다.

드릴 다운하고 이러한 종류의 성능 문제를 찾는 방법에 대한 몇 가지 제안을 듣고 싶습니다. 특히 수백 가지 바인딩이 복잡해 지도록 정렬하는 방법.

답변

1

는 DB에서 모든 설정을 가져 오는 데 걸리는 시간입니까?

반사 -> 반사 발광, 성능,하지만 코딩은 피타입니다. 2로 구축 과정을 분리에 대해 어떻게

:

빈 1 일 모든 항목을 contruct하는 단지이며, 데이터 항목이 언 바운드 될 것 /을 다음 라운드는 부분을 바인딩 번째의 데이터입니다.

이렇게하면 데이터 바인딩이 느리다고 가정하면 적어도 ppl은 화면에 팝업을 볼 수 있습니다. 그리고 데이터 바인딩이 항상 빨라 졌거나 문제의이 부분을 별도로 조사 할 수있는 이유를 제시 할 수 있습니다.

+0

아니요, DB 시간은 다른 곳에서 보냈습니다. 방출하는 것에 대해 당신은 무엇을합니까? 여기서 'async'로딩을 시도하고 차례대로 각 컨트롤과로드/바인드를 시도했지만 ControlCollection이 작동하고 반응하는 방식으로 인해 Winforms에 너무 많은 단점이 있습니다. –

관련 문제