我通过SharpDX使用Direct2D做一些简单的线条图。我创建一个PathGeometry,然后调用Open()来获取GeometrySink并向接收器添加行。 GeometrySinks是Disposable,所以我认为应该这样做:
var linePath = new D2D.PathGeometry(D2dFactory);
using (var sink = linePath.Open())
{
sink.BeginFigure(point0, D2D.FigureBegin.Hollow);
sink.AddLine(point1);
sink.AddLine(point2);
sink.EndFigure(D2D.FigureEnd.Open);
sink.Close();
}
此代码有效,但VS 2012的代码分析表明我不应该两次处理GeometrySink。这真的发生在这里吗?也许当我打电话给sink.Close()
时?如果是这样的话,我应该摆脱using()
陈述。什么是使用GeometrySink的正确方法?
答案 0 :(得分:2)
我用Ants探测器描绘了一个SharpDx应用程序,GeometrySink对象在内存中悬空,在处理几何体之前在GeometrySink上显式调用Dispose()之后我再次进行了剖析并且没有更多的GeometrySink对象在记忆中。所以简单的答案是肯定的。
答案 1 :(得分:1)
我相信你的sink.Close正在调用Dispose方法以及using()触发它。