2011-10-19 2 views
3

캔버스에 그래프를 그려야합니다 (scrollviewer에 의해 묶여 있음). 그리고 약 정도의 메모리가 있습니다.캔버스에서 최적의 드로잉에 대해 걱정할 필요가 있습니까?

간단하게하기 위해 자체 렌더링 할 수있는 usercontrol에서 노드를 파생 시켰습니다.

그러나 노드 사이에 선을 만들지 않았습니다. 내가 알고있는 것은 MSDN이다.

표면에 Geometry 클래스와 Shape 클래스는 아주 비슷하다. 둘 다 2D 그래픽 렌더링에 사용되며 둘 다 비슷한 클래스를가집니다 (예 : EllipseGeometry 및 Ellipse). 그러나이 두 세트의 클래스에는 중요한 차이점이 있습니다. 하나는 Geometry 클래스 자체를 그릴 수있는 등 Shape 클래스의 일부 기능이 없습니다.

노드가 더 많을 수 있으므로 시스템이 작업을 천천히 렌더링 할 수 있습니다. 따라서 성능을 높이기 위해 기하학 (사용자 정의 렌더링)이 최선의 선택이라고 생각합니다.

내 질문 :

  1. 나는 선을 그릴 모양이나 형상으로 가야하나요?

  2. 나는 디스플레이 (이 경우 내가 객체를 지오메트리 컨트롤에서 노드를 변환 할 것)를 가속화하기 위해에서 ScrollViewer의 현재 뷰포트 영역을 렌더링 할 경우, 또는 그냥 모든 노드를 반복한다 그들 사이에 선을 그어야합니까?

  3. 그래프를 메모리에 비트 맵으로 렌더링 한 다음 뒤집어 줘야합니까? 일반적인 응용 프로그램 프로그래밍보다 게임 프로그래밍에 더 많은 소리가납니다! : D

  4. 성능 향상을 위해 WPF가 자동으로 렌더링 된 것을 보지 않습니까?

답변

2

몇 점 당신의 화제에서 ...

를 깊이 생각해 나는 당신이 그들을 느리게 만들 수 있습니다 스스로를 다시 그려야하는 노드의 능력을 싶지 않는 것을 얻는다. 대신 언제 그리고 어느 노드를 그릴 지 결정해야합니다. 나 맞아?

글쎄, 나에게 괜찮은 것처럼 보이지만, Canvas은 절대로 가상화되지 않습니다. codeplex 웹 사이트를 방문하여 WPFToolkit 소스 코드를 다운로드하는 것이 좋습니다. DataVisualization 네임 스페이스 아래에 여러 차트 컨트롤 (노드간에 선이 그려지지 않은 것과 유사한 ScatterredChart 포함)과 소스 코드가 있습니다. 그들이 한 일들을 관찰하십시오. 어떻게 그래프 도구의 성능을 향상 시켰습니까?

나는 또한 Scrollable Virtualized Canvas을 구현하는 방법에 대해 교묘하게 보았습니다. 아마 캔버스에 노드를 빠르게 렌더링하는 데 도움이 될 것입니다.

개인적으로 ...

1] 형상이 가볍고 좋아요.

2] Visual HitTesting은 항목이 렌더링 된 영역 아래에 있는지, 즉 스크롤보기의 범위 내에 있는지를 이해하는 데 도움이 될 수 있습니다. 그렇지 않으면 자신을 그릴 수 없도록 숨 깁니다. 스크롤에 대한 호색주의가 잘 작동하기 때문에 "숨김"이 아니라 "축소"가 아닙니다.

3] 노드를 렌더링하고 단위보기 즉 X 축에서 한 지점에 특정한 영역 즉, 반복 영역이 자동으로 함께 맞춰 지도록 가로 방향으로 가상화 스택 패널을 사용하여 동료를 기억합니다. 모 놀리 식 그래프.

그 놀라운 임팩트가있었습니다.

모두 최선을 다하고 진행 상황을 게시 해 두십시오.

+0

가상화를 지적 해 주셔서 감사합니다. 그것을 시험해보고 며칠 후에 결과를보고 할 것입니다. – Nayan

+0

나는 가벼운 무게 솔루션을 위해 가상화 된 캔버스 예제와 코드를 조합하여 사용했다. 올바른 방향을 알려 주셔서 감사합니다! – Nayan

+1

내 기쁨. 더 이상 질의가 있으면 응답하십시오. –

관련 문제