C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[18759] Doublebuffred에 대해서 (일명 화면 잔상)
양용성.우석아빠 [ysyang] 8018 읽음    2010-11-14 20:51
저는 SQLGate 라는 프로그램을 개발하고 있는 개발자입니다.

제목에서 Doublebuffred 에 대해서 몇가지 체험을 이야기 하려고 합니다.

구글에서 검색해 보면,
"컨트롤에서 깜빡임을 줄이거나 방지하기 위해 보조 버퍼를 사용하여 화면을 다시 그려야 하는지 여부를 나타내는 값을 가져오거나 설정합니다. "
라고 나옵니다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.control.doublebuffered.aspx

SQLGate 라는 제품에서 SQLGate2010 이라는 제품으로 업그레이드를 하면서 컴파일로를 교체했었습니다.

유니코드를 지원한다는 사실 만으로 그동안 미루어 왔던 컴파일러를 바꿀 시기가 되었다 판단되었습니다.

그 이후 2년 이상의 시간이 흘렀습니다.

많은 사용자들이 SQLGate 가 이전보다 느려졌다라고 이야기 합니다.

저는 SQLGate를 듀얼 모니터에서 사용해도 느린감을 못찾았습니다. - 이유는 제가 UI를 자주 변경해서 작업하지 않는데 있었죠 -

최근 홍** 전산실에서 사용하는 사용자를 만났고 그 이유를 대해서 자세히 듣게 되었습니다.

화면을 최대한 해보니 MDI 창에 CHILD WINDOW가 같이 확대되는 과정에서 페인팅 문제로 인해서 프로그램이 느려지는 현상을 눈으로도 확인할 수 있었습니다.

사무실에 들어와 여러가지 코드를 하나씩 지워가면서 UI의 잔상을 눈으로 계속 확인했습니다. 정말 눈이 너무 아프고 달리 자동화 할수 있는 방법이 없었습니다.

전 오직 서드파티 컴포넌트의 페인팅 코드가 문제가 있을꺼라고 생각했습니다. 특히 SpTBX 계열 컴포넌트가 느리게 작동하는걸 알았고 이를 교체해야겠다고 생각했습니다. 근데 아시다시피 SpTBX 가 델 2007에서 유니코드를 지원하는 컴포넌트라 사용했었던건데 델2009 로 오면서 필요하지 않았지만 기존의 코드가 이미 너무 많이 작성되어 있는 상태였습니다. 그래서 교체하는 작업이 상단한 시간을 요구할 거라 생각했고, 그래도 교체해야 한다고 판단했습니다.

SpTBX 를 뜯어 내는 작업을 상단히 힘들었습니다.

그러는 중에 우리는 새로운 것을 확인하게 되었습니다.

델7에서 패널을 두개 올려 놓고 아래쪽 패널의 Align= alClient 를 놓고 그 패널 위에 TLabel 만 올려 놓습니다.
그리고 실행후에 폼의 크기를 조절합니다. 좀 빠르게 .....

그러면 TLabel의 캡션이 깜빡이 없이 잘 표시 됩니다.

그런데 똑같은 상황을 델2009에서 사용하면 캡션이 깜박거립니다. 단지 캡션만 올려 놓았을 뿐인데요.

사실 좀 놀랐습니다. 그 상태로 약 2년간 개발을 해왔다는 사실에 우리 개발팀도 좀 놀랐습니다.

그중에 델2009에서 부터 생긴 Doublebuffred 에 대해서 알게 되었고, Doublebuffred = True 로 해 놓았을 뿐인데

우리 프로그램은 화면 UI 의 움직임이 눈에 띄게 좋아졌습니다.

거기에 패널에 ParentBGColor 라는 프로퍼티를 False 로 해주면 더욱 움직이 없는 패인팅을 한다는걸 알게 되었습니다.

혹시나 저와 같은 현상으로 고민하시는 분들은 꼭 확인해 보세요

감사합니다.

혹시 더 빠르게 표시할수 있는 방법이 있는 분은 꼭 좀 알려주세요.
류종택 [ryujt]   2010-11-14 21:39 X
자세히 기억 나지 않지만,
Doublebufferd는 꽤 오래 전부터 사용이 가능했던거 같은데요.
적어도 델파이 7에서는 사용 가능했던거 같은데요^^*  아닌가요 ㅡ.ㅡa
남병철.레조 [lezo]   2010-11-14 23:50 X
사용자 만족도가 갑자기 올라가겠는데요? ^^
UI 프로그램을 많이 하진 않아서 별로 신경쓰지 않았지만 저도 채크해 봐야겠습니다.
(최근 무급? 알바를 하다보니... OTL...)
박지훈.임프 [cbuilder]   2010-11-15 01:32 X
TWinControl의 DoubleBuffered 속성은 델파이 4 때부터 있었는데.. 다만 public 속성이어서 오브젝트 인스펙터에 나타나지 않았습니다. 델파이 2009 버전부터는 여러 컨트롤들에서 DoubleBuffered 속성을 볼 수 있게 되었는데요, TWinControl에서는 public으로 그대로이지만 상속받은 대부분의 컨트롤들에서 published로 바꿔놨습니다. 그런 이유로, 델파이 2009 버전에 이르러서야 DoubleBuffered 속성을 보게 되는 경우가 많습니다.

저는 델파이 5 버전이었던가에서 DoubleBuffered 속성을 알게 되어서, 제가 만드는 컴포넌트들 중에 화면 업데이트 속도가 중요한 경우에는 DoubleBuffered를 published로 재정의하거나 하지 않고 아예 디폴트 값을 true로 바꿔서 썼었습니다. 그런데 최근에는 까먹고 DoubleBuffered에 대해 별로 신경을 안썼는데, 양용성님 덕분에 기억을 되살렸네요.
류종택 [ryujt]   2010-11-15 09:43 X
이것도 너무 오래 되니까 언제부터 사용했는 지도 기억이 안나는 ㅡ.ㅡ;;
양용성.우석아빠 [ysyang]   2010-11-15 10:28 X
그런데 왜 디폴트가 False 일까요 ? True 이면 문제 될께 많은가요 ?
장성호 [nasilso]   2010-11-15 11:13 X
디폴트가 false인 이유는 .. 잘은 모르겠지만..
메모리 때문이 아닐가 하는 생각이 듭니다.

메모리 dc를 확보해서 .. draw한후에 Free하기를 반복하니...
요즘은 모르겠지만.. 옛날엔... 메모리가 중요했을듯..
Lyn [tohnokanna]   2010-11-15 13:44 X
메모리보단 속도가 느리다는..
크레브 [kkol]   2010-11-15 14:45 X
저희 회사도 그런 현상이 몇번 발생하여 문제가 된적이 있었는데..
그러면. 왜 구버전에서는 깜박임이 없었는데.. 2009나 2010에서 깜박임이 생겨났을까요?
구버전에 비해 뭔가 달라지기는 한듯 합니다.
박지훈.임프 [cbuilder]   2010-11-15 14:56 X
구체적인 건 좀 찾아봐야겠지만... 딱히 VCL 측면에서 2009 이후 버전들과 이전 버전들에서 UI 관련으로 다른 것은 없어보였습니다. 그런데 윈도우 자체가 유니코드 애플리케이션과 안시코드 애플리케이션을 다르게 처리하는 것 같더군요.
아제나 [azena]   2010-11-17 13:54 X
요즘은 컴이 빨라서 신경 안 쓰고 있다가 얼마전에 비트맵으로 노가다 하면서 다시 적용하고 있지요 =_=

+ -

관련 글 리스트
18759 Doublebuffred에 대해서 (일명 화면 잔상) 양용성.우석아빠 8018 2010/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.