2010-02-22 3 views
2

WPF에서 간단한 게임과 유사한 응용 프로그램을 작성했습니다. 그려지는 객체의 수는 WPF 기능 내에 있습니다. 몇백 개의 타원 및 간단한 채우기가있는 행과 같습니다. 나는 DispatcherTimer 때로는 개체의 위치를 ​​조정할 수 있습니다 (1/60th 초).WPF 스터 터/드롭 프레임 방지

새 위치를 계산하는 코드는 많은 개체가있을 때 상당히 집중적 일 수 있으며 프로세서를 완전히로드 할 수 있습니다. 이 문제가 발생할 때마다 WPF는 프레임을 건너 뛰기 시작합니다. 아마도 응용 프로그램의 "느려짐"을 보완하려고 시도했을 것입니다.

나는 무엇보다 오히려 일어나는 모든 프레임 어쨌든 모든 프레임을 느리게 만입니다. 누락 된 프레임은 이 아니며은 속도를 추가하지 않습니다. 왜냐하면 시각적 업데이트가 꽤 빠르기 때문입니다.

WPF가 좋은 생각이라고 생각하는지 여부에 관계없이 화면에 내 변경 사항을 반영하도록 WPF에 강제로 적용 할 수 있습니까?

+0

간단한 버전의 앱을 보여줄 수 있습니까? –

답변

0

이 문제는 UIElements를 만들고 이동하는 대신 OnRender 오버라이드가있는 Canvas를 사용하여 수정되었습니다. 즉, OnRender에서 모든 것을 손으로 그려야하지만 프레임을 건너 뛰지 않고 모든 FPS에서 일관되게 실행할 수 있습니다.

2

행복하게 고칠 수 있지만 불행히도 내가 할 수있는 일이 없다고 생각합니다! WPF는 게임 라이브러리가 아닌 응용 프로그램 생성 프레임 워크로 설계되었으므로 응용 프로그램 성능과 프레임 속도에 비해 "사용성"이 우선시됩니다. 이 기능은 실제로 로우 엔드 시스템에서 인식 된 성능을 유지하면서 매우 풍부한 애니메이션과 효과를 사용할 수 있으므로 응용 프로그램을 제작할 때 매우 잘 작동합니다.

나는 당신이 당신의 이동 코드의 Dispatcher priority 아래로 약간 렌더링 아래로 밀어됩니다 시도 할 수 있다고 생각하는 유일한 것은 같은 것을 사용하여 (로드 다음 하나 다운) :

this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, MoveMyStuff); 

을 나는이 없습니다 그게 도움이되는지 확인하기 위해 테스트 하니스의 모든 종류.

관련 문제