C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[28736] Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지..
김용수 [heredity] 1127 읽음    2004-02-08 00:46
님의 코드(아래 참조)중 (1) 부분이 (2)와 같은 처리 루틴에 있지 않다면
이상 없어 보입니다.

  TStringList * m_pStrList = new TStringList();  // (1) <--- 이 부분이 다른 곳에 있다면 OK
  if( m_pStrList->Count == 100 )                 // (2)
  {                                              // (3)
      m_pStrList->Delete( 99 );                  // (4)
      String strMsg = "Test";                    // (5)
      m_pStrList->Insert( 0, strMsg );           // (6)
  }                                              // (7)

혹시 다른 곳에 문제가 있는 것은 아닌지 확인해 보세요.
아래는 님의 코드를 약간 변경해서 만든 테스트 프로그램입니다.
10여분을 돌렸는데, 일정 시간이 경과한 후엔 메모리 사용량에 대한 변화가
없더군요. 님도 한번 실행해 보시기 바랍니다.

사용된 Components ; TButton, TTimer, TMemo

  //---------------------------------------------------------------------------

  #include <vcl.h>
  #pragma hdrstop

  #include "Unit1.h"
  //---------------------------------------------------------------------------
  #pragma package(smart_init)
  #pragma resource "*.dfm"
  TForm1 *Form1;
  //---------------------------------------------------------------------------
  __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
  {
    Timer1->Interval = 1;
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::Timer1Timer(TObject *Sender)
  {
    if( Button1->Caption == "중지" ) {
      static int nCnt = 0;
      int        nMax = 100, nMax1 = nMax - 1;

      Timer1->Enabled = false;
      Caption = ++nCnt;

      while( Memo1->Lines->Count >= nMax ) {
          Memo1->Lines->Delete( nMax1 );
      }

      AnsiString strMsg = AnsiString( "Test" ) + nCnt;
      Memo1->Lines->Insert( 0, strMsg );
      Timer1->Enabled = true;
    }
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
    Button1->Caption = (Button1->Caption == "중지") ? "시작" : "중지";
  }
  //---------------------------------------------------------------------------

아뿔사 님이 쓰신 글 :
: TStringList * m_pStrList = new TStringList();;
: if( m_pStrList->Count == 100 )
: {
:     m_pStrList->Delete( 99 );
:     String strMsg = "Test";
:     m_pStrList->Insert( 0, strMsg );
: }
: 이렇게 해서 데이터를 받아서 ListView에 넣어서 항상 100개가 넘지않게
: 관리를 합니다.
: 그런데 이렇게 된것이 메모리 해제가 안되는것 같습니다.
: m_pRRCList->Clear()만해도 메모리해제가 된다고 되어있는것 같은데 안됩니다.
: 아래 Func를 부르면 당연히 작업관리자 메모리사용에서 메모리사용량이 떨어져야 되는데
: 그렇지를 못하고 위의 Func를 계속사용하면 시스템이 점점 느려지고 paging를 하는것 같습니다.
: if( m_pStrList )
: {
:      int nCnt =m_pStrList->Count;
:      for( int n = nCnt - 1 ; n >= 0 ; n-- )
:      {
:          m_pStrList->Strings[n] = "";   //혹시나 하는 마음으로 넣어 봤지만 똑같았습니다.
:          m_pStrList->Delete(n);         //
:      }
:      m_pStrList->Clear(); ==> 여기서 해지하면 메모리가 떨어져야 될것 같은데
:      delete m_pStrList;   ==> 그래서 아예 지우고 다시 생성을 해도 마찮가지..ㅜㅜ
:      m_pStrList = NULL;
:
: }
: if( m_pStrList == NULL )
:     m_pStrList      = new TStringList();
: 결론은 제가 하는 메모리해지가 틀린건지 TStringList가 원래 그런건지.. 알수가 없네요..
: 울트라 전문가님 도와주세요 ~~ ^^
:
:

+ -

관련 글 리스트
28734 울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 아뿔사 1099 2004/02/07
28736     Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 김용수 1127 2004/02/08
28738         Re:Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 아뿔사 1117 2004/02/08
28740             Re:Re:Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 김용수 1246 2004/02/09
28743                 Re:Re:Re:Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 아뿔사 892 2004/02/09
34430                     Re:Re:Re:Re:Re:울트라 전문가님 도와주세요 ~~ TStringList 메모리 해지.. 김용수 923 2004/02/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.