2010-05-06 1 views
0

.net2/C# 어플리케이션이 있습니다. 그것은 소켓에서 데이터를 받아 서식을 지정하고 richtextbox 컨트롤에 표시합니다. 통신은 별도의 스레드에서 발생합니다. 수신 된 데이터는 표시 기능이 추출하는 대기열에 추가됩니다. 정렬, 색칠 등등과 같은 중요한 작업이 수행됩니다. 디스플레이 기능은 메인 스레드에 있습니다. 내가 관찰 한 것은 전체 컴퓨터가 멈추는 많은 데이터가있을 때입니다. 표시를 중단하는 툴바 버튼이나 ALT-TAB이 다른 앱으로 전환하는 것은 문제가되지 않습니다. 나는 애플 리케이션의 상단에 작업 관리자를 열 수 있었고 CPU 소비는 약 25 %에 불과했다 (작업 관리자 자체는 느리게 실행되는 것처럼 보임). 이 문제의 원인에 대한 아이디어가 있습니까? 미리 감사드립니다.리치 텍스트 디스플레이가 시스템을 고정시킵니다.

답변

1

데이터 형식을 지정하는 표시 기능 데이터를 큐에서 제거한다고 가정합니다. 이 작업은 별도의 스레드에서 수행됩니까? 이미 그렇게하지 않았다면 그렇게 할 수도 있습니다. 실제로 richtextbox에서 텍스트를 설정하는 지점은 무엇입니까? 다중 스레드 환경에서 UI에서 작동하는 모든 작업은 UI 스레드 (InvokeRequired)에서 수행해야합니다.

0

로그 데이터를 GUI로 직접 출력하는 것은 큰 오류입니다.

1.) 중간 버퍼 (예 : ArrayList)에 로그 데이터를 기록하고 GUI 스레드는 기록 할 항목이 있으면 1 초에 한 번씩 검사하는 타이머를 설정해야합니다. 분명히 당신은 어디서나 중간 버퍼를 lock {}해야합니다.

2.) 또한 RTF 컨트롤 자체에 심각한 문제가 있습니다. 그것은 .NET 프레임 워크에서 최악의 성능을 보입니다.

내가 어떻게하여 RichTextBox을하는 기사를 썼다 빨리 여기 120 번 : C# RichEditBox has extremely slow performance (4 minutes loading) SOLVED