1

我正在通过 SharpDX 使用 Direct2D 来绘制一些简单的线条图。我创建了一个 PathGeometry,然后调用 Open() 来获取 GeometrySink 并将线条添加到接收器。GeometrySinks 是一次性的,所以我认为我应该这样做:

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 的正确方法是什么?

4

2 回答 2

2

我已经使用 Ants 分析器分析了一个 SharpDx 应用程序,GeometrySink 对象在内存中悬空,在处理几何本身之前在 GeometrySink 上显式调用 Dispose() 之后,我再次分析并且没有更多的 GeometrySink 对象在内存中。所以简单的答案是肯定的。

于 2014-05-20T12:30:04.647 回答
1

我相信您的 sink.Close 正在调用 Dispose 方法,并且 using() 正在触发它。

于 2013-08-27T19:54:11.100 回答