Visual Basic :: Unload 문을 이용한 메모리 관리

Visual Basic으로 프로그램을 짜면 Form부터 구성합니다. 하나의 프로젝트 안에 여러 개의 Form을 구성할 수도 있죠.


여기서 2개 이상의 Form으로 구성된 프로그램을 구동시키면 모든 Form이 Load 된다는 사실이 중요합니다. “Load”라는 의미는 메모리에 저장된다는 뜻입니다. 보통 ‘종료’, ‘X’ 같은 버튼을 누르거나 코드를 다 수행하면 프로그램이 종료되지만, 이 때 활성화 되어 있던 Form만 메모리에서 삭제됩니다. 즉, 비활성화 되어 있던 다른 Form들은 프로그램이 종료되어도 여전히 메모리에 남게 됩니다.


사용자 삽입 이미지

예를 들면 위 그림처럼 되는 겁니다. 이것이 hisAlpha Image v0.6의 버그였죠. 이제 이 문제를 해결해보겠습니다.


문제를 해결하는 방법은 Unload 이벤트와 메소드를 활용하는 것입니다. 아래의 코드를 넣겠습니다.


Private Sub Form_Unload(Cancel As Integer)
    Unload fomPrint
    Unload fomInput
End Sub


이 코드는 Form이 종료될 때 다른 Form들도 종료시키는 즉, 메모리에서 지우라는 명령입니다. 이것을 마지막 Form에만 넣는 게 아니라, 모든 Form에 넣어야 ‘X’ 버튼을 이용한 종료에도 대응시킬 수 있겠죠? 이제 저장하고 실행해보겠습니다. 더 이상 메모리에 남아 있는 모습은 보이지 않네요.


이건 초보 개발자가 아니라도 많이 하는 실수 같습니다. 메모리를 남기는 버그를 가진 프로그램이 더러 보이더라구요.

Similar Posts

  • imagEmail, 간략한 기획

    비주얼 베이직으로 만들었던 hisAlpha Image를 C 언어를 이용하여 리눅스용으로 다시 만들려고 합니다.  리눅스용이라고는 하나, 윈도우나 OS X용으로도 쉽게 포팅될 듯합니다. hiaAlpha Image는 일종의 프로토타입인 것이죠. 사실, 강분도 님의 권유가 아니었으면 그냥 묻혔을겁니다. ㅋ 아래는 간략한 기획입니다. 기능 이메일 주소를 이미지로 만듬. 15종의 메일서버 지원. 개발환경 환경: 리눅스 (Ubuntu 8.10, i386) 언어 및 툴킷 : C,…

  • imagEmail, changelog 2009. 2. 28 ~ 3. 15

    2009-03-15———-– ‘gdk_draw_line’는 gtk_example의 chapter5 참조. 2009-03-11———-– *builder, *windowMain, *dialogSave, *textInputID 전역으로 정의.– buttonSave_clicked_cb: *emailID에 *testInputID의 문자열을 저장. 2009-03-09———-– v0.9.0 개발 시작.– windowMain, dialogSave GUI 구현.– GtkBuilder을 사용하면 libglade가 필요없음.– ‘gtk-builder-convert’로 xml 파일을 생성하여 GtkBuilder로 적용.– buttonSave_clicked_cb: dialogSave를 띄움. 2009-03-02———-– 간략한 설계 구성. imagEmail_design_20090302.odg 참조. 2009-02-28———-+ imagEmail 기획.  + 기능    – email 주소를 이미지로 만든다. …

  • 우분투에서 듀얼 모니터 설정하기 (NVIDIA) + AWN 만져주기

    예전부터 작업을 할 때 문서와 편집기를 번갈아 가면서 띄우는 게 정말 불편해서 상당한 삽질 끝에 듀얼 모니터를 완성했습니다. 이 글은 저 말고도 원하는 분들을 위해 제가 듀얼 모니터를 설정한 방법을 쓴 글입니다. 여기서는 ATI 제품은 논외로 하겠구요. 페도라 11에서 아마 ATI가 제법 지원될 듯 한데, 우분투는 아직 길이 먼 듯 싶네요. NVIDIA 제품은 자체 설정…

  • 우분투에서 자동으로 파티션을 불러오자.

    아래는 “Ubuntu 8.10:Intrepid Ibex” 환경에서 작성한 글입니다. 다른 버전에서는 다르게 적용될 수 있습니다. 저는 여분의 HDD를 자료받기용으로 파티션을 주어 사용합니다. 윈도를 사용할 때 생긴 버릇인데, 바이러스에 의한 피해를 최소화 하기 위해서였습니다. 이 버릇은 리눅스(우분투)를 사용하면서도 계속 되었지요. 문제는 리눅스(우분투)에서는 FAT32 형식의 파티션은 자동으로 불러오도록(mount) 되어 있지 않다는 것입니다. 내려받을 폴더를 Download 파티션으로 지정해놓은 상태에서 매번…

  • C :: srand(time(null)) 과 usleep() 함수

    요즘 동아리에서 C 스터디를 하고 있습니다. 리눅스 프로그래밍, 윈도우즈 프로그래밍, 루트킷 탐지 프로그램 프로젝트를 하기 위한 선행학습이지요. 복습도 되구요. 우선, 로또 게임 시뮬레이션을 만들었는데, 주석을 포함하여 217줄이 나오더군요. 그 코드 중에서 번호를 무작위로 섞는 함수 부분에 대해 얘기하고자 합니다. 자, 그러면 코드부터 볼까요? 배열에 저장된 45개의 번호를 무작위로 서로 맞바꾸는 알고리즘입니다. 알고리즘 자체는 쉽죠? Swap…

  • RSS 피드를 직접 만들어 보자. Feed43 활용…

    PC사랑 홈페이지의 포인트경매를 아시나요? 경매방식이 재미있고 제품들도 쓸만해서 제가 좋아하는 컨텐츠입니다. 예전에는 매일 홈페이지에 들어가서 경매가 어떻게 되어가는지 확인했지만, 이제는 RSS로 받아서 쉽게 확인하고 있습니다. Feed43을 이용하지요. Feed43에 대해 소개한 글들을 보면 어떻게 RSS를 만드는지 자세하게 나와있지 않아 참 힘들었습니다. 이번도 2시간의 삽질을 거쳐 간신히 RSS 피드를 만들었습니다. 2시간동안 삽질했더니 이제 어느정도 알겠더군요. 그래서 제가…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다