2011-08-30 45 views
0

我已經在這個一對夫婦的時候,不能弄明白。 DrawPath方法拋出System.OutOfMemoryException。DrawPath(筆,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

之間變化看代碼的,你的性反應,我會說,真正的問題不在這裏。可以使用一些內存分析器像埃德建議,或者只是http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx useProcessExploer。運行您的程序並使用它,當前查看Process Explorer中可見的WorkingSet找出UX故障的路徑。如果你在32位機器上,如果工作集到達arrounf 1.2GB的mem空間進程將導致memoverflow異常。 – Tigran

回答

0

這是極不可能的,這是你的問題的根本原因考慮的筆和路徑對象,你是處置財產。那線可引發異常,但問題已經醞釀了一段時間,這只是打破了駱駝背的秸稈,傾斜了冰山......你明白了。這就是說,這將有助於瞭解你的PathPoints陣列有多大作爲,狄格蘭在評論中提及。

給自己一個好的分析器(我用RedGate's ANTS Memory Profiler有一個免費的試用版),通過它的步伐讓你的應用程序,讓內存使用增加,然後使用探查器結果來縮小實際的罪魁禍首。回來一些更多的信息或你的結果,我會很樂意進一步幫助。

+0

感謝您的回覆。我有這個程序,但沒有嘗試。這段代碼運行在一個單獨的線程中,奇怪的是它不會使線程或主應用程序崩潰。我可以忽略這個例外,程序會很好,但它看起來不是一個好策略......我知道在某個地方肯定有一些錯誤。儘管我會給ANTS程序一個嘗試! – Diogo

+0

你可能會忽略它在VS下運行,但在生產中它會崩潰。即使你忽視它,它也會讓程序處於不良狀態。使用分析器,它會爲您節省大量時間。 –