|
님의 코드(아래 참조)중 (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가 원래 그런건지.. 알수가 없네요..
: 울트라 전문가님 도와주세요 ~~ ^^
:
:
|