2009-12-04 3 views
2

이전 C++ Builder/Delphi 응용 프로그램의 모양을 현대화하려고 시도하면서 시각 테마 (visual styles)를 사용할 수 있었으며 테마가 추가 된 성능에 얼마나 놀랍습니까? 예를 들어, 우리의 기본 설정 페이지 (우리는 개발 시간과 재교육 비용을 이유로 지금 다시하고 싶지 않아 11 탭 (200) 제어 괴물 대화)에 대한 : 테마없이XP 시각적 테마/시각적 스타일을 사용하면 성능이 저하됩니다.

  • 활성화 : ~ 0.1 초 양식 및 컨트롤 (QueryPerformanceCounter로 측정)을 구성하려면 ~ 0.9 초에서 폼에 메뉴 항목을 클릭하는 것으로부터 (스톱워치로 측정). 최종 사용자에게는 그리 눈에 띄지 않습니다.
  • 양식을 사용하여 양식과 해당 컨트롤을 구성하는 ~ 0.6 초, 표시되는 양식을 클릭하면 ~ 1.5sec이 표시됩니다. 최종 사용자에게는 매우 눈에.니다.

Windows XP 데스크톱과 Windows 7 VM에서 비슷한 결과가 나타납니다.

이 특별한 경우를 개선하기 위해 수행 할 수있는 단계가 있다는 것을 알고 있습니다 (예 : 대화 상자의 탭을 느리게로드하거나 완전히 다시 디자인하는 것과 같은). 그러나 눈에 띄는 성능 저하를 추가하는 것이 일반적입니다. 이 성능 저하를 피하기위한 쉬운 제안이 있습니까?

+0

성능 문제를 특정 한 가지까지 추적 했습니까? 아니면 조합 이었습니까? –

+0

아무 것도; 근본적인 문제는 양식이 너무 크다는 것입니다. BeginUpdate/EndUpdate가 도움이됩니다. 다음 번 출시를 요구하는 대신 대화 상자를 한 번 만들 것입니다. 당신의 도움을 주셔서 감사합니다. –

답변

3

와우. 나는 단 하나의 형태로 200 개의 컨트롤을 가졌다 고 확신하지 못한다. 다음은 몇 가지 제안 사항입니다. 이 때 한 번 응용 프로그램 시작 대화 상자를 만드는 대신 수요를 만드는 필요로 할 때를 표시 할 위치

  • 은 특별한 경우 일 수 있습니다.

  • 나는 또한 생성자 나 OnShow 이벤트에서 어떤 일이 일어나는지 살펴볼 것입니다. BeginUpdate/EndUpdate가 장점이되는 목록을 채우고 있습니까?

  • OnResize 이벤트 또는 그와 비슷한 형태로 코드가 두 번 이상 나오면 양식이 만들어지고 한 번 실행될 때까지 기다릴 수 있습니까?

  • 어떤 종류의 컨트롤을 사용하고 있습니까? 한 종류의 컨트롤 페인트가 특히 느리게 칠해지면 더 빨리 칠하는 페인트로 바꿀 수 있습니다. 그러나 이것은 약간의 테스트를 필요로합니다.

1

당신은 시도하고 컨트롤에 doublebuffering에 돌 수 있었다, 우리는 거의 같은 행동을했다, 그리고 그것은 어느 정도이 방법에 의해 가속화되었지만, 애플리케이션 테마 지원을 채택하기 전에 성능을 접근하지 않았다.

+0

마지막으로 이것으로 돌아 가기 ... 양식에서 이중 버퍼링이 도움이되지 않습니다. 실제로 TPageControl 페인트가 잘못 작성됩니다. 개별 컨트롤에 이중 버퍼링을 시도하지는 않았지만 지연은 컨트롤을 만드는 것이지 그림을 그리는 것이 아닙니다. –