SharpDX.Direct2D1.GeometrySink是否需要显式处理?

时间:2013-08-27 19:48:21

标签: c# directx direct2d sharpdx

我通过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的正确方法?

2 个答案:

答案 0 :(得分:2)

我用Ants探测器描绘了一个SharpDx应用程序,GeometrySink对象在内存中悬空,在处理几何体之前在GeometrySink上显式调用Dispose()之后我再次进行了剖析并且没有更多的GeometrySink对象在记忆中。所以简单的答案是肯定的。

答案 1 :(得分:1)

我相信你的sink.Close正在调用Dispose方法以及using()触发它。