2013-09-02 3 views
4

Direct2D 응용 프로그램에서 중요한 성능 문제가 하나 있습니다. DirectGD를 사용하여 PathGeometry를 사용하여 그래프를 그리면 Windows 8.1에서 더 나은 성능을 얻고 깨끗한 렌더링을 얻을 수 있습니다.Direct2D에서 EndDraw()가 작업 시간의 80 %를 차지합니다

DeviceResources를 만들 때 Factory 인터페이스를 사용하여 PathGeometry를 만듭니다. 그런 다음 출력면에 그래프를 그릴 그래프 포인트를 설정합니다. 마지막으로 렌더링 된 ImageSource가 XAML에서 Image 요소의 소스로 사용됩니다.

내 시나리오를 달성하기 위해 아래의 샘플 링크를 따라했습니다.

http://code.msdn.microsoft.com/windowsapps/XAML-SurfaceImageSource-58f7e4d5

위의 샘플

는 Direct2D의에서 ImageSource 출력을 얻기 위해 나에게 많은 도움이 마지막으로 XAML/C#을 응용 프로그램에 걸쳐 사용했다.

내 문제가 생길 수 있습니다. 내 Windows Store 응용 프로그램의 단일 페이지에서 24 개 이상의 그래프를 사용합니다. 이 그래프를 통해 사용자는 왼쪽 및 오른쪽 위치에서 조작 할 수 있으며 특정 확대/축소 수준으로 확대/축소 할 수 있습니다.

따라서 사용자가 그래프를 조작하려고 할 때마다 매번 새로운 것과 대신 TransformedPathGeometry를 사용하여 Translation 및 Scaling 행렬을 설정합니다.

ID2D1TransformedGeometry *m_pTransformedGeometry; 

pFactory->CreateTransformedGeometry(graphgeometry, combinedMatrix, &m_pTransformedGeometry); 

마지막으로 DrawGeometry 메서드를 사용하여 TransformedGeometry를 그립니다.

VisualStudio2013의 성능 분석 도구를 사용하여 응용 프로그램을 검사했습니다. 특정 엿보기 수준에서 m_d2deviceContext-> EndDraw() 메서드를 호출하는 데는 실행 시간의 80 % 이상이 걸리는 것을 확인할 수 있습니다. 이 성능 결과물에 더 많은 아이디어를 얻기 위해 아래 스크린 샷을 첨부했습니다.

이 성능을 향상시킬 방법이 있습니까??

enter image description here

당신은 사람이 나를 도와 주 시겠어요?

감사합니다, 데이비드 C 성능 저하 및 시간 비용 사이의 차이가

+2

이것은 정상입니다. EndDraw() 호출에서 DirectX는 실제로 렌더링 작업을 화면에 표시합니다. 여기에있는 문제는 드로잉이 느리다는 것이 아닙니다. 나머지 코드는 단순히 시간이 많이 걸리지 않습니다. 따라서 비율이 큽니다. –

+0

@HansPassant : 성능 누출 문제입니다. 그래서 우리는 외부 적으로 %를 줄일 수 있습니까? . 그렇다면 고려해야 할 요소는 무엇입니까? –

+1

더 많은 코드를 작성하면 번호가 자동으로 작아집니다. 성능 문제를 전혀 시연하지 않았습니다. 번호를 제시하고 앱에 실제로 응답 성 문제가 있음을 나타내지는 않았습니다.DirectX를 변경하고 더 빨리 만들 수있는 작업이 없기 때문에 * 완료되었습니다. 그것은 이제까지 달리기 위하여 이미 빨리이다. 그리는 것을 단순화하면 더 빨리 할 수 ​​있습니다. –

답변

2

.

그리기 방법이 다른 부분보다 효과적이라면이 방법은 느리지 만 다른 부분에는 많은 CPU가 필요하지 않음을 의미 할 수 있습니다.

88.2 %는 다른 물건을 쓰는 것보다 그 재료를 그리는 데 더 많은 시간을 할애한다는 것을 알려줍니다.

무승부가 느린 지 확인하려면 타이머를 사용하십시오.

+0

프레임 워크에서 EndDraw 메서드를 호출하기 만하면됩니다. 그러나 다른 방법과 비교할 때 더 많은 비율을 차지합니다. 성능을 높이기 위해이 비율을 줄이는 이유가 무엇일 수 있습니다. –

+0

@DavidBekham 다른 방법과 비교하는 것은 여전히 ​​유효한 방법이 아닙니다. EndDraw에서 모든 도면이 발생하거나 가장 어려운 작업 인 경우이 방법이 88.2 %를 사용하는 것이 좋습니다. – sigi

+0

ARM 장치에서 응용 프로그램을 테스트 할 때 성능이 너무 느리다는 것을 실제로 성능적인 측면에서 의미합니다. 앱 성능을 향상시키는 방법은 무엇입니까? –

관련 문제