2013-08-27 106 views
1

我通過SharpDX使用Direct2D來做一些簡單的線條圖。我創建了一個PathGeometry,然後調用Open()來獲取一個GeometrySink並將線添加到接收器。 GeometrySinks是一次性的,所以這是我應該怎麼我想做到這一點:是否需要明確處置SharpDX.Direct2D1.GeometrySink?

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的正確方法?

回答

1

我相信你的sink.Close調用Dispose方法以及使用()觸發它。

+0

這也是我的猜想,但我想知道這是一個Direct2D的東西,還是隻是一個SharpDX的東西。你知道底層的Direct2D API是如何工作的嗎?如果我用C++寫這篇文章,我是否需要發佈GeometrySink? – shoelzer

+0

我不後悔。我不是圖形類。 :) –

2

我已經使用Ants profiler描述了一個SharpDx應用程序,GeometrySink對象在內存中懸浮,在GeometrySink中顯式調用Dispose()之前處理幾何本身,我再次進行了剖析,沒有更多的GeometrySink對象在內存中。所以簡單的答案是YES。

相關問題