2010-05-03 3 views
4

WinForms 앱에서 UserControls의 스크롤 속도를 높이려면 어떻게해야합니까?WinForms에서 느린 CPU 집약적 인 스크롤 속도 향상

저의 주요 폼은 느린 머신에서 빠르게 스크롤하는 데 어려움이 있습니다. 작은 스크롤 단위로 각각의 페인팅은 CPU를 많이 사용합니다.

내 양식에는 하나의 입력란 아래에 약 50 개의 UserControl (여러 필드 포함)이 있습니다. 아주 작은 스크롤 이벤트에 대한 불필요한 재 페인트를 제거하기 위해 OnScroll과 UserPaint를 가로 채기 시도했지만 기본 페인트는 어쨌든 호출됩니다.

느린 컴퓨터에서는 어떻게 효율적으로 스크롤 할 수 있습니까?

+1

한 페이지에 50 개의 컨트롤이 너무 많습니다 – Benny

+0

그 부분이 있었지만 화면이 지정되었지만 * 많이 *입니다. 화면은 끌어서 놓기 순서 변경을 사용하여 복합 항목의 큰 그리드와 같습니다. WinForms에서 그 기능을 사용하는 또 다른 방법이 있습니까? –

답변

1

나는 탭을 사용하여 스크롤을 제거했습니다.

3

컨트롤이 나타내는 데이터가 실제로 변경 될 때만 업데이트되는 오프 스크린 비트 맵을 사용하는 것이 좋습니다. 그런 다음 모든 OnPaint은 화면에 해당 비트 맵을 렌더링해야합니다.

페인트 프로세스가 집중적이고 너무 많은 컨트롤이 있기 때문에 응용 프로그램의 성능에 큰 차이가 있음을 알 수 있습니다.

DoubleBuffering 컨트롤 속성을 사용하여 귀하의 경우에 도움이되지 않습니다

주 - 화면에 렌더링하기 전에 오프 스크린 비트 맵에 렌더링 윈폼에게 않지만, 윈폼은 '아무튼 이후 그 여전히 모든 페인트주기에서 발생 표상이 언제 바뀌 었는지 추적해라.

그래서 자신을 굴려야합니다. 그렇게 어렵지 않습니다. 다음은 reasonably good article on the subject과 같은 모양입니다.

2

스크롤 단계의 크기를 늘릴 수도 있습니다. 예 :

스크롤 막대의 클릭당 패널의 내용이 세로로 100 단위 스크롤됩니다. 따라서 매번 더 큰 단계를 밟으면 경험이 더 나아질 수 있습니다. 그리고 물론 수평 스크롤 바에 대해서도 똑같이 할 수 있습니다.

+0

스크롤 바를 드래그 할 때 스크롤 바 버튼을 화살표 키로 사용하는 것은 효과적이지만 잘되지는 않습니다. 드래그하기 위해 그렇게 할 수있는 좋은 방법이 있다면! –

+0

@S B, 불행히도 엄지를 드래그하면 이와 같이 제어 할 수 없습니다. 추가 개선을 위해 UI 디자인을 재고해야합니다. –