2011-08-30 65 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下运行,但在生产中它会崩溃。即使你忽视它,它也会让程序处于不良状态。使用分析器,它会为您节省大量时间。 –