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 % 이상이 걸리는 것을 확인할 수 있습니다. 이 성능 결과물에 더 많은 아이디어를 얻기 위해 아래 스크린 샷을 첨부했습니다.
이 성능을 향상시킬 방법이 있습니까??
당신은 사람이 나를 도와 주 시겠어요?
감사합니다, 데이비드 C 성능 저하 및 시간 비용 사이의 차이가
이것은 정상입니다. EndDraw() 호출에서 DirectX는 실제로 렌더링 작업을 화면에 표시합니다. 여기에있는 문제는 드로잉이 느리다는 것이 아닙니다. 나머지 코드는 단순히 시간이 많이 걸리지 않습니다. 따라서 비율이 큽니다. –
@HansPassant : 성능 누출 문제입니다. 그래서 우리는 외부 적으로 %를 줄일 수 있습니까? . 그렇다면 고려해야 할 요소는 무엇입니까? –
더 많은 코드를 작성하면 번호가 자동으로 작아집니다. 성능 문제를 전혀 시연하지 않았습니다. 번호를 제시하고 앱에 실제로 응답 성 문제가 있음을 나타내지는 않았습니다.DirectX를 변경하고 더 빨리 만들 수있는 작업이 없기 때문에 * 완료되었습니다. 그것은 이제까지 달리기 위하여 이미 빨리이다. 그리는 것을 단순화하면 더 빨리 할 수 있습니다. –