【问题标题】:GDI+ DashStyle throws OutOfMemoryException in .NETGDI+ DashStyle 在 .NET 中引发 OutOfMemoryException
【发布时间】:2009-05-18 15:48:41
【问题描述】:

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

我有什么选择?

【问题讨论】:

  • 我假设您正在处理钢笔?并且提到的一篇文章说要避免 Graphics.DrawLines 中的重复点。您使用的是单数版本,对吗?您可能会发布一些代码;也许这将有助于获得一些答案。
  • 你肯定要处理你所有的 GDI+ 对象。我遇到了很多问题,但其中一个是内存不足异常。
  • 另一个想法是使用分析器查看代码可能发生的情况,例如内存泄漏,并帮助您解决问题。
  • 我认为这里的内存是显卡的内存。而且我认为问题在于我在 WM_PAINT 事件之间缓存了笔,有些人认为这是一个坏主意。

标签: .net winforms gdi+ out-of-memory pen


【解决方案1】:

我刚刚遇到了同样的问题。经过进一步调查,我发现了以下内容。

  1. 线条长度正是自定义的虚线图案长度。 将线条长度更改为 +/- 1 像素可避免该错误。
  2. 我正在使用LineCapRoundDashCapRound,切换到 LineCapSquareDashCapFlat 避免了错误
  3. 错误来自尝试使路径变平(可能来自圆形末端)
  4. 笔宽为零。

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

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2012-03-25
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多