2013-08-27 3 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 메서드를 호출하고 using()이 트리거하는 것으로 생각합니다.

+0

그건 내 추측이지만, 이것이 Direct2D 일인지 아니면 SharpDX 일인지 궁금해하고 있습니다. 기본 Direct2D API가 어떻게 작동하는지 알고 있습니까? C++로 이것을 작성했다면 GeometrySink를 릴리스해야합니까? – shoelzer

+0

죄송합니다. 나는 그래픽 종류가 아닙니다. :) –

2

개미 프로파일 러를 사용하여 SharpDx 응용 프로그램의 프로파일을 작성했습니다. GeometrySink 객체는 메모리에 매달려 있습니다. 다시 프로파일 링 한 형상 자체를 삭제하기 전에 GeometrySink에서 Dispose()를 명시 적으로 호출하고 메모리에 GeometrySink 객체가 더 이상 존재하지 않습니다. . 간단한 대답은 YES입니다.