GDI+;DashStyle抛出.NET中的OutOfMemoryException

GDI+;DashStyle抛出.NET中的OutOfMemoryException,.net,winforms,gdi+,out-of-memory,pen,.net,Winforms,Gdi+,Out Of Memory,Pen,我在渲染对象层次结构时使用了DashStyle.Dash。我的应用程序广泛使用图形。转换,我发现在某些比例值(包括100%的比例)和某些旋转角度下,Graphics.DrawLine在使用带有DashStyle.Dash的笔时抛出OutOfMemoryException。使用谷歌我发现这是一个很好的例子。微软告诉我们,这不是一个好消息。到目前为止,我还没有找到解决这个问题的方法 我的选择是什么?我刚刚遇到了同样的问题。经过进一步调查,我发现如下情况 线条长度正好是自定义的短划线图案长度。 更改行

我在渲染对象层次结构时使用了
DashStyle.Dash
。我的应用程序广泛使用
图形。转换
,我发现在某些比例值(包括100%的比例)和某些旋转角度下,
Graphics.DrawLine
在使用带有
DashStyle.Dash
的笔时抛出
OutOfMemoryException
。使用谷歌我发现这是一个很好的例子。微软告诉我们,这不是一个好消息。到目前为止,我还没有找到解决这个问题的方法


我的选择是什么?

我刚刚遇到了同样的问题。经过进一步调查,我发现如下情况

  • 线条长度正好是自定义的短划线图案长度。 更改行长度+/-1像素避免了错误
  • 我正在使用
    LineCapRound
    DashCapRound
    ,切换到
    LineCapSquare
    DashCapFlat
    避免了错误
  • 错误源于尝试展平路径(可能来自圆角端)
  • 钢笔的宽度是零

  • 我的最终解决方案是不要画零宽度的线

    我刚刚遇到了同样的问题。经过进一步调查,我发现如下情况

  • 线条长度正好是自定义的短划线图案长度。 更改行长度+/-1像素避免了错误
  • 我正在使用
    LineCapRound
    DashCapRound
    ,切换到
    LineCapSquare
    DashCapFlat
    避免了错误
  • 错误源于尝试展平路径(可能来自圆角端)
  • 钢笔的宽度是零

  • 我的最终解决方案是不要画零宽度的线

    我想你是在处理这支笔吧?提到的其中一篇文章说要避免在图形中出现重复点。您使用的是单数版本,对吗?你可以发布一些代码;也许这会有助于得到一些答案。你一定要处理好你所有的GDI+对象。我曾经遇到过很多问题,其中一个是内存不足异常。另一个想法是使用探查器,看看代码可能发生了什么,例如内存泄漏,并帮助您解决它。我认为这里讨论的内存是图形卡的内存。我想问题是我在WM_绘画活动之间缓存笔,有些人说这是个坏主意。我想你是在处理笔吧?提到的其中一篇文章说要避免在图形中出现重复点。您使用的是单数版本,对吗?你可以发布一些代码;也许这会有助于得到一些答案。你一定要处理好你所有的GDI+对象。我曾经遇到过很多问题,其中一个是内存不足异常。另一个想法是使用探查器,看看代码可能发生了什么,例如内存泄漏,并帮助您解决它。我认为这里讨论的内存是图形卡的内存。我认为问题在于我在WM_绘画活动之间缓存笔,有些人提到这是个坏主意。