그리드나 리스트뷰 같은 것들은 셀을 갱신하면 화면을 다시 그리게 됩니다.
셀 수정이 많아서 몇 천번씩 다시 그릴려면 장난 아니게 느리겠죠.
그래서 데이터를 갱신하기 전에 BeginUpdate를 걸어주고 갱신이 끝나면 EndUpdate를 호출해서
화면 갱신을 1번으로 제한하면 속도가 무진장 빨라집니다.
4000줄 정도면 전체 갱신에 0.1초 밖에 안 걸리기 때문에 ProcessMesssages를 호출할 필요도 없습니다.
BeginUpdate
for(...) {}
EndUpdate
해당 함수 사용법은 볼포나 인터넷 검색을 참고하세요.
http://blog.naver.com/PostView.nhn?blogId=ysaraha&logNo=50011431492
김태우 님이 쓰신 글 :
: 스트링그리드에서 셀부분이 길면 오래 걸리네요.
:
: 흠...
: 한 4000개의 줄을 읽어 들여서
:
: for(int j = 1; j < row+1; j++)
: {
: for(int i = 1; i < col+1; i++)
: {
: MainForm->StringGrid1->Cells[i][j] = XLSheet.OlePropertyGet("Cells", j , i).OlePropertyGet("Value");
: MainForm->StringGrid1->Cells[0][j] = IntToStr(j);
: MainForm->StringGrid1->Cells[i][0] = IntToStr(i);
: Application->ProcessMessages();
: }
: }
:
: 위와 같은 방식으로 넣어 버리면...
: 무지하게 오래 걸립니다..
: 물론 프로그램이 먹통되는 현상은 없앴지만요..
: 원래 이렇게 느린건지....좋은 방법이 없을까나요..?
|