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
[58385] Re:Re: 많은 도움이 되었습니다.. 대단히 감사합니다 ^^ (냉무)
아롱사태 [] 1180 읽음    2009-09-04 15:21
장성호 님이 쓰신 글 :
: 많은 양의 데이타라...
: 얼마나 많은 데이타를 부려줬는지 궁금하네요
:
:
: 먼저 메모장은 편집에 한계가 있습니다.
: 이론적인 근거도 명확하지 않고 명확하게 테스트를 해보진 못했지만
: 일반적으로 알려진 사실입니다.
: 다음 링크를 참조하세요
:
: 리치에디터 편집 한계
: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=2
:
: TMemo가 64KByte넘어갈때 CaretPos 문제
: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=760
:
:
: 많은 시간이 요하는 작업을 할때 윈도우가 멈추는 문제는?
:
: 원인은 간단합니다.
:    작업중에 화면그리는것이나, mouse메세지에 등에 대해 처리를 못하기 때문이죠
:
:
: 해결방법은?

: 방법1.
:    작업중간에 Window메세지를 처리해주면 됩니다.
:
:    
:    while(true)
:    {
:         //작업코드
: 
:         //작업 중간중간에 다음과 같은 코딩을 넣어주면 
:        // 메세지를 처리하므로 화면이 먹통되지 않습니다.
: 
:         Application->ProcessMessages();
:         //....
:    }
: 

:
:
: 방법2.
:   메모장의 경우  BeginUpdate / EndUpdate를 이용하면
:   line을 한줄씩 add할때마다 update를 하지 않으므로 매우 빨라집니다.
:
:     Memo1->Lines->BeginUpdate();
:     
:     //반복해서... 
:       Memo1->Lines->Add("asfd");
:  
:     Memo1->Lines->EndUpdate();   
: 

:
:
: 방법3
:    대용량의 파일을 가장 빨리 읽어오는 방법은 파일을 읽어오지 않는게 가장 빠르고
:    ListView에 item을 Add하는 가장 빠른 방법은 Item을 add하지 않는게 가장 빠릅니다.
:       참조 http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=899
:
:    무슨 말도 안되는 헛 소리냐구요?

:    아무리 많은 데이타라 할찌라도 동시에 화면에 다 보여 줄수는 없습니다.
:    Memo나 StringGrid에 내용을 모두 add하면 해당 control이 알아서 필요한 부분만 보여주지만..
:
:    CustomDraw를 이용해서 개발자가 직접 보여주는 부분만 화면에 그려주면
:    Memo나 StringGrid 등에 데이타를 모두다 add할 필요가 없게 되는것입니다.

:    다음링크에 있는  Virtual-ListView가 비슷한 개념이죠
:    http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=899
:   
:    문론 ListView에서는 이런것을 지원하기때문에 .. 쉽게 구현이 가능하지만...
:    TStringGrid는 OnDrawCell  등의 이벤트를 통해 Cell에 그려주면 됩니다.
:    OnDrawCell  이벤트가 현재화면에 보여줄 부분만 발생합니다.
:
:    TMemo난 OnDrawCell같은 이벤트가 없으니 좀 복잡한데..
:     64kbyte이상이면 TMemo를 대체할 다른 Component를 쓰시길 권하구요
:     그 이하이면 beginupdate / endupdate를 이용하시길 권합니다.
:
:    그럼..
:
:
:    
: 아롱사태 님이 쓰신 글 :
: : 스트링그리드나 메모장같은 컴포넌트에 많은양의 데이터를 뿌리면
: : 뿌려지는 모습이 보이면서 윈도우가 움직이거나 다른 버튼이 눌려지질 않는군요
: : 어떻게 해야 중간에 윈도우를 움직이거나 이벤트같은 명령을 넣을수 있는건가요

+ -

관련 글 리스트
58377 스트링그리드나 메모장 데이터그리는중 멈춤현상 아롱사태 1042 2009/09/04
58381     Re:스트링그리드나 메모장 데이터그리는중 멈춤현상 장성호 1710 2009/09/04
58385         Re:Re: 많은 도움이 되었습니다.. 대단히 감사합니다 ^^ (냉무) 아롱사태 1180 2009/09/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.