简介:让一组平面上的点(x,y)和func F(x,y)返回double。 Points是在用户定义的矩形中随机生成的(这意味着对变量的约束)。让我们将点对点的数量设置为N.这个集合比三角形(Delaunay三角剖分)。想象一下,这个三角测量设置了func F(x,y)表面的近似值。边缘上的值线性变化(因此它只是点之间的范围(x,y,z = F(x,y))。顶点是插值的顶点。因此我们将三角形本身作为插值平面。
我在标准PictureBox
上绘制三角剖分。使用LinearGradientBrush
绘制边缘 - 颜色反映值F(x,y)的水平(棕色 - 最大值,浅绿色 - 最小值,绿色 - 中间)。
这一切都有效,直到我设置N> = M,其中M随时间从~30k变化到50k。在这些情况下,我得到内存不足异常。虽然我没有看到任务管理器缺乏操作性内存,但我认为它指的是视频内存,不是吗?
我可以绘制N = 100k的三角测量而不使用颜色渐变(只是简单的单色边缘),所以我认为问题出在LinearGradientBrush
使用或创建GDI对象Pen
和{{1}每次迭代。
部分代码:
LinearGradientBrush
示例: n = 10k,n = 100k (built as x86),n = 200k (built as x86)
问题:问题是什么以及如何解决?
请不要建议使用其他绘图工具作为解决方案(例如OpenGL和其他强大的工具),但如果你想把它写成评论的评论 - 我会记住它,也许它将来会有用。这个问题不是关于如何在广义上绘制具有渐变边缘的三角剖分,而是在我的情况下,例外的根源是什么。
UPD :程序是在x64中构建的。在x86中它绘制了200k(没有尝试过更高的N)并且看起来没问题。经过一段时间后,300k下降了〜1.8gb。