2008-09-04 6 views
4

내 응용 프로그램에는 표면에 많은 컨트롤이 있으며 런타임에 더 많은 기능이 동적으로 추가됩니다.Windows Forms 응용 프로그램 성능

표시되는 컨트롤의 수를 제한하기 위해 탭을 사용하고 있지만 이중 버퍼링도 있지만 다시 그리기 (크기 조정, 최대화 등)가 필요할 때 화면이 계속 깜박입니다.

WinForms 앱 성능을 향상시키기위한 팁과 트릭은 무엇입니까?

답변

4

나는 당신이 할 수있는 두 가지 알고 있지만, 그들은 항상 모든 상황에 적용되지 않습니다.

  1. 당신은 흐름 레이아웃 패널 또는 테이블 레이아웃 패널을 사용하는 것이 아니라 각 컨트롤 (myNewlyCreatedButton.Location.X/Y)에 대한 절대 위치를 사용하는 경우 더 나은 성능을 얻을 것입니다. WinForms는 컨트롤을 배치해야하는 위치를 파악하기 위해 훨씬 적은 노력을해야합니다.

  2. 많은 컨트롤을 추가/제거/수정하는 단일 작업이있는 경우 영향을받는 컨트롤의 컨테이너 (패널 또는 전체 양식)에서 "SuspendLayout()"을 호출하십시오. 작업이 끝나면 같은 패널에서 ResumeLayout()을 호출하십시오. 그렇게하지 않으면 양식이 컨트롤을 추가/제거/수정할 때마다 레이아웃 패스를 수행해야하므로 훨씬 많은 시간이 소요됩니다. 참조 : http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout(VS.80).aspx

그러나 이러한 방법이 창 크기를 조정할 때 어떻게 적용될 수 있는지는 잘 모르겠습니다.

2

비록 이러한 방법이 창 크기를 조정할 때 어떻게 적용될 수 있는지 잘 모르겠습니다.

ResizeBegin 및 ResizeEnd 이벤트를 처리하여 SuspendLayout() 및 ResumeLayout()을 호출합니다. 이러한 이벤트는 System.Windows.Form 클래스에만 있습니다 (컨트롤에도 있었으면 좋겠지 만).

"항목"의 큰 숫자를 사용하지 않고 컨트롤을 재사용, 그들의 각 하나의 컨트롤을 만드는 피하려고 :

3

은 다른 팁 몇 가지보다 더 일반적이지만, 여기 내 꺼야. 예를 들어 버튼 하나에 해당하는 10,000 개의 항목이있는 경우 10 000 개의 버튼을 만들고 프로그램 핸들러에 연결하는 것이 매우 쉽습니다. 따라서 이벤트 핸들러에 입력 할 때 요소 너는 일해야 해. 그러나 500 개의 버튼을 만들면 (즉, 한 번에 500 개의 버튼 만 화면에 표시된다는 것을 알고 있기 때문에) 버튼과 항목 사이에 "매핑 계층"을 도입하는 것이 훨씬 효율적입니다. 동적으로 사용자가 무언가를 할 때마다 단추를 다른 항목으로 다시 지정합니다. 예를 들어 스크롤 막대를 움직이는 것처럼 보이는 단추 집합을 변경하게됩니다.

관련 문제