2011-08-30 2 views
0

저는 몇 시간 동안이 문제를 해결해 냈습니다. 메서드 DrawPath가 System.OutOfMemoryException을 던지고 있습니다.DrawPath (Pen, GraphisPath) OutOfMemoryException을 던지고 있습니다.

필자는 pen.DashPattern이 실제로 System.OutOfMemoryException을 던지고있는 것을 보아서 대시 패턴을 설정했지만 오류를 방지하지는 못했습니다.

using (var pen = new Pen(Color.Black,1.0f)) 
{ 
    pen.DashPattern = new[]{1.0f}; 
    pen.Transform = context.ReverseTransform; 
    try 
    { 
     using (var temporaryPath = new GraphicsPath(path.PathPoints, path.PathTypes)) 
     { 
      context.Graphics.DrawPath(pen, temporaryPath); 
     } 
    } 
} 

여기에 도움이 될 것입니다! 미리 감사드립니다!

+0

path.PathPoints 배열의 크기는 얼마나됩니까? – Tigran

+0

PathPoints는 0에서 몇 백까지 달라집니다. – Diogo

+0

코드와 응답을 보면 실제 문제가 여기에 없다고 말할 수 있습니다. Ed 제안과 같은 메모리 프로파일 러 또는 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx useProcessExploer를 사용할 수 있습니다. 프로그램을 실행하고 함께 작업하십시오. Process Explorer에서 볼 수있는 WorkingSet을 살펴보면 문제의 UX 경로를 파악할 수 있습니다. 32 비트 머신에서 작업 세트가 도착하면 1.2GB의 mem 공간 프로세스가 memoverflow 예외로 이어질 것입니다. 귀하의 회신에 감사드립니다. – Tigran

답변

0

펜 및 경로 개체를 처분하는 속성을 고려할 때이 문제의 근본 원인은 매우 드뭅니다. 그 행은 예외를 발생시킬 수 있지만 문제는 이미 일부 시간 동안 양조되고 있습니다. 낙타의 등을 깨뜨린 밀짚입니다. 빙산에 팁을주었습니다. 즉, 귀하의 PathPoints 배열이 Tigran이 주석에서 언급 한 것과 얼마나 큰지를 아는 것이 도움이 될 것입니다.

좋은 프로파일 러를 얻으려면 (무료 평가판을 사용하는 RedGate's ANTS Memory Profiler을 사용하십시오.) 응용 프로그램을 페이스로 가져 와서 메모리 사용량을 늘린 다음 프로파일 러 결과를 사용하여 실제 범인을 좁히십시오. 더 많은 정보 또는 결과로 되돌아 오면 도움을 드리겠습니다.

+0

. 나는 그 프로그램을 가지고 있지만 아직 시도하지 않았다. 이 코드 조각은 별도의 스레드에서 실행되며 이상하게도 스레드 나 기본 응용 프로그램이 충돌하지 않습니다. 예외를 무시하고 프로그램을 정상적으로 수행 할 수는 있지만 좋은 정책처럼 보이지는 않습니다 ... 어딘가에 실수가 있어야한다는 것을 알고 있습니다. ANTS 프로그램에 시도해 볼게! – Diogo

+0

VS에서 실행중인 내용을 무시할 수는 있지만 프로덕션에서는 충돌이 발생할 수 있습니다. 무시하더라도 프로그램이 나쁜 상태로 남습니다. 프로파일 러를 사용하면 많은 시간을 절약 할 수 있습니다. –