개발자 블로그

RichEdit 컨트롤 syntax highlighting 속도를 빠르게.. 본문

프로그래밍/MFC

RichEdit 컨트롤 syntax highlighting 속도를 빠르게..

로이드.Roid 2016. 12. 25. 02:08

즐겨찾기를 정리하다가 예전에 추가해놓았던 RichEdit 컨트롤 관련 자료들을 그냥 삭제하기 아까워서 정리를 해둘까한다.

그 때 당시 만들던 MFC 프로그램이 원래 그냥 에디트 컨트롤을 사용했었는데 키워드 강조 기능을 추가하기 위해서 RichEdit 컨트롤로 전환을 했었다. 그 과정에서 문제가 생긴게.. 텍스트의 양이 늘어나면 키워드 강조를 위해서 소모되는 시간이 굉장히 크게 증가했었다. 이 문제를 해결하기 위해서 찾았었던 자료들이다.

자 그럼 느려터진 RichEdit 컨트롤의 속도를 향상시키기 위해서 찾아봤었던 자료들..


1. Fast HTML syntax highlighting with the Rich Edit control - Code Project
  2006년도 자료라서 그런건지 데모 프로그램이 제대로 동작하지 않았다. 기본적인 컨셉은 전체 내용에 대해서 처리하는게 아니라 보여지는 영역에 대해서만 구문강조 처리를 해준다는 것. 근본적인 해결방법은 아니지만 그래도 괜찮은 해결방법이다. 

2. CRichEditCtrl prevent auto scroll on SetSel - Stack Overflow
  키워드 강조하기 위해서는 일단 해당 키워드를 선택을 해야 되는데, 이 때 사용하는 api가 SetSel이다. 이걸 콜하면 자동으로 스크롤이 된다. 불필요한 오버헤드를 줄이기 위해서는 자동으로 스크롤 되는걸 비활성화 시켜줘야 된다. 이 방법에 대한 코드.

3. Faster rich edit syntax highlighting
  이 글이 그나마 가장 큰 도움이 되지 않을까 싶다. (굳이 RichEdit를 사용하겠다고 하면..)
  최적화 방법 4가지를 소개한다. 최적화를 하지 않았을 때를 100이라고 한다면, 3가지 최적화 방법의 조합으로 4.3까지 줄일 수 있다고 한다. (참고로 3, 4번은 비슷한 내용인 듯 하다..)간단하게 언급하자면..

  1. Redraw 비활성화
  2. 래핑된 메서드 대신에 Win32API를 직접 호출
  3. 이벤트 핸들러를 일시적으로 NULL로 set
  4. 알림 메시지(Notification Messages)를 생성하지 않도록 처리


솔직히 오래돼서 기억이 가물가물 하기는 한데.. 3번 방법은 적용하지 않았다. 하다가 안돼서 못한건지.. 아님 굳이 Win32API까지 써가면서 해야되는건가.. 싶어서 안한건지 모르겠네..-_-;;

어쨌든 내가 한 해결 방법은 1번 방법이다. 아주 만족스럽지는 않았지만 그래도 뭐 그냥저냥 쓸만한 정도는 됐었던 것 같다.


아, 마지막으로 아래 내용한번 보고가자.

닷넷으로 왔어도 RichEdit 컨트롤은 노답인 듯 하다.. 그렇다. 쓰지말던가 다른 커스텀 컨트롤을 구하던가 하자.

Comments