2010-01-24 2 views
2

나는 wxTextCtrl을 가지고 있으며 매우 큰 문자열을 넣어야합니다. (15 MB 문자열처럼) 유일한 문제는 매우 느립니다. 내가하는 일은 다음과 같습니다.wxTextCtrl의 텍스트 표시 속도가 느린 이유는 무엇입니까?

char * buff = ... 
wxString data(buff, wxConvUTF8); 
text->ChangeValue(data); 

그러나 이것은 병목 현상이 아닙니다. 이 코드 블록이 반환되는 즉시 발생합니다. 전체 앱이 약 30 초 동안 정지합니다. 나는 ChangeValue 직후에 wxYield를 시도했는데 그 문자열의 처음 몇 줄이 컨트롤에 표시되지만 그 후에도 여전히 멈 춥니 다. 어떻게 이것을 피할 수 있습니까?

ChangeValue가 거의 즉시 반환한다는 점을 강조해야합니다. 지연은 아마도 wxTextCtrl의 내부 메시지 처리기 또는 그 이후에 발생합니다.

+1

wxTextCtrl이 15 메가 비트 문자열 (대략 전체 프로그래밍 도서의 크기)을 채우는 것을 예상하지 못했던 것처럼 들립니다. –

+0

서버 로그를 열었습니다. –

+0

페이징 메커니즘을 구현하고 한 번에 전체 텍스트의 작은 창만로드 할 수 있습니다. 이 접근법은 거의 즉각적이어야합니다. 그래도 wxWidgets에 대한 전문 지식이 충분하지 않아서 어떻게하는지 알려주지 않습니다. –

답변

2

wxTextCtrl은 OS의 표준 텍스트 컨트롤 만 포함하므로이 제한은 wxTextCtrl에서도 분명합니다. 할 수있는 일은 wxStyledTextCtrl을 대신 사용하는 것입니다.이 방법은 멀티 메가 바이트 텍스트를로드 할 수 있으며 오랜 시간이 걸리지 않습니다. 로그의 일부분을 스타일링하여 (예 : 읽기 오류 메시지) 강조 표시 할 수도 있지만 로딩 시간이 다시 늘어날 수 있습니다.

+0

업데이트 : 나는 너무 느리게 만들었던 것을 발견했다. 나는 지금 수정 된 줄 번호 코드이다. –

관련 문제