2013-07-04 3 views
0

Windows Phone 8 앱을 개발 중입니다. Rectangle과 Lines를 사용하여 ScrollViewer 내부에 배치 된 Canvas 안에 그래프를 그립니다. 캔버스 그리기 만들기 System.OutOfMemoryException Win Phone 8

하지만 내가있는 ScrollViewer 내부의 캔버스에 놓여있다

(그래프 3 배 이상 화면의 크기를 갈 수 있음) 캔버스의 그림 중 System.OutOfMemoryException 직면하고있는 도면 중

. ScrollViewer를 제거하면 문제가 발생하지 않지만 속성을 설정하더라도 캔버스를 스크롤 할 수 없습니다. Scrollviwer.HorizontalScrollBarVisibilty = Visible.
<ScrollViewer Name="MainScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" Grid.RowSpan="2" > 
    <Canvas x:Name="MainCanvas" HorizontalAlignment="Left" Tap="OnCanvasTap" > 
     <Canvas.RenderTransform> 
      <CompositeTransform CenterX="100" CenterY="75" /> 
     </Canvas.RenderTransform> 
    </Canvas> 
</ScrollViewer> 

나는 또한 내가 그리기하고 있지만, 그렇다하더라도 문제가 지속될 경우 GC.CollectCanvas.Children.Clear()를 사용하여 시도했다.

+0

작은 캔버스를 사용 하시겠습니까? – K3N

+0

응답 해 주셔서 감사합니다. 캔버스를 사용하여 그래프를 그렸습니다. 그래프가 기간에 따라 매우 큰 경우가 있습니다. 선 그리기를 사용하고 있습니다. 더 나은 방법은 그것을 처리 할 수 ​​있습니까? – vasuy19

답변

0

그래픽이 모두 들어갈 수 있도록 스크롤 가능한 div 안에 큰 캔버스를 사용하는 대신 작은 캔버스를 사용하고 그래픽 크기가 아닌 실제 화면 크기를 최대한으로 활용 한 다음 캔버스를 번역하고 그래픽을 다시 그리는 데 사용할 수 있습니다. 번역 된 위치.

거대한 캔버스가 있고 그 중 25 % 만 보게되면 다른 75 %는 메모리를 낭비하기 때문에 최적입니다.

캔버스를 "훔쳐보기"로 번역하여 결합하면 화면에 같은 결과가 나타나며 (한 번에 볼 수있는 것의 100 %를 볼 수 있습니다) 그래픽에 대해 걱정할 필요가 없습니다 이것은 캔버스에 의해 자동으로 클리핑됩니다.

마우스/터치 드래그 앤드 이동 조작으로 번역을 첨부하거나 "가상"스크롤 바를 사용하는 것이 좋습니다.

+0

감사합니다. Ken. 나는 당신의 제안을 따르고 화면 크기 그래프의 두 배만을 그린다. 나머지는 캔버스를 지우고 다음 부분을 그리는 것이다. :) – vasuy19