상세 컨텐츠

본문 제목

Control.AllowDrop 에 의한 메모리 누수

C#

by 탑~! 2011. 1. 27. 09:25

본문

* Control.AllowDrop 을 true 로 설정한 상태에서는 Control 의 메모리가 해제되지 않습니다.

 

예를 들면 다음과 같습니다.

 

void Test()

{

   Control control = new Control();

   control.AllowDrop = true;
}

 

위의 코드에서 Test() 메소드가 호출된 이후 'control' 이라는 인스턴스의 메모리가 해제되지 않습니다.

 

ildasm 으로 System.Windows.Forms.Control set_AllowDrop(bool) 메소드를 분석해 보면

 

AllowDrop True 가 되면 DropTarget class 의 인스턴스를 Control 의 인스턴스를 이용하여 생성하고

 

RegisterDragDrop 을 호출하면서 인자값으로 DropTarget 의 인스턴스를 이용합니다.

 

(RegisterDragDrop function 에 대해서는 추가적으로 설명하지 않습니다.)

 

따라서, AllowDrop 을 true 로 설정할 때 DropTarget 에 의해 인스턴스의 참조 카운터가 증가하게 됩니다.

 

[해결방법]

 

Control.AllowDrop 속성을 이용해야할 때는 마지막에(Dispose 전) 속성값을 false 로 설정하시면 됩니다.

ps. 데브피아에 좋은 내용 있어 올립니다.

출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1928&page=1

'C#' 카테고리의 다른 글

Form 을 마우스로 Drag 하여 이동하기  (0) 2011.03.22
Form 마우스로 드래그 하여 이동하기  (0) 2011.03.21
string to Enum Conversion  (0) 2011.01.27
[단일 프로세스 실행]  (0) 2010.12.31
[Windows Forms 창 흔들기 효과]  (0) 2010.12.31

관련글 더보기