UI쓰레드를 여러개 두어서 UI갱신을 빠르게할 목적으로 테스트하였다.

 

윈도우 프로그램은 하나의 메세지 루프&큐를 가지기 때문에 많은 윈도우들을 갱신하면 부하가 걸린다.

 

그래서 각 윈도우 마다 메세지 루프&큐를 갖게 하여 성능이 향상 됨을 테스트하였다.

 

 

테스트 시나리오

1. 윈도우 20개 생성

2. 윈도우 마다 10ms 타이머 발생하여 랜덤한 값을 그리드 갱신

3. 갱신 시간 확인

 

테스트 결과

1. 한개의 UI 쓰레드 테스트

 

 

 

 

 

2. 20개의 UI 쓰레드 테스트

 

 

 

 

 

 

주요 코드

 

/// <summary>

/// 새로운 UI Thread 가진 View 추가한다.

/// </summary>

private void AddNewUIThreadSubView()

{

    SubView subView = null;

    Thread thread = new Thread(

                    () =>

                    {

                        subView = new SubView();

                        forms.Add(subView);

                        Application.Run(subView);

                    });

    thread.SetApartmentState(ApartmentState.STA);

    thread.Start();

} 

 

 

기타

1. UI 쓰레드를 생성 후에 해당 Form에 접근할때에는 다른 쓰레드이므로 Invoke를 통하여 조작해야한다.

2. MDI는 SetParent 함수를 이용해 해결한다.

3. UI Thread가 여러개일때는 CPU 사용률이 올라갔지만, UI 갱신은 빨라졌다.

 

 

의문점

1. 한개의 UI 쓰레드에서 SetParent 함수를 설정하니 성능이 올라갔다. 이유를 고민해봐야함..ㅠㅠ

2. 1번의 이유로 ..과연 멀티 UI 쓰레드 때문에 성능이 향상된건지 의문이다................ㅡㅜ

 

 

 

 

소스코드

 

HowToMultiUIThreads.zip

+ Recent posts