반응형
Step 2: 심층 아키텍처 및 엣지 케이스 검증 (Code Breakdown & Risk Audit)
단순히 폼을 분할하는 것을 넘어, 현장에서 발생할 수 있는 UI 크래시와 렌더링 병목을 사전에 차단하는 방어막입니다.
- 컨트롤 과부하 및 GDI+ 화면 껌뻑임(Flickering) 방어:
- 의심 시나리오: 검사 이력 그리드에 데이터가 1초에 10번씩 추가되고, 상/하단 카메라 영상 2개가 20fps로 업데이트됩니다. 일반적인 WinForms TableLayoutPanel은 자식 컨트롤이 갱신될 때마다 전체 레이아웃을 다시 계산하며 화면이 미친 듯이 껌뻑거립니다.
- 방어 분석: CreateTableLayoutPanel 메서드 내부의 Reflection(리플렉션) 기법이 핵심입니다. Microsoft는 TableLayoutPanel의 DoubleBuffered 속성을 꽁꽁 숨겨놓았습니다(protected). 이를 강제로 true로 뚫어주어, 백버퍼(Back-buffer)에 그림을 다 그린 후 단 한 번만 화면에 쏘게 만들어 껌뻑임을 100% 소멸시켰습니다.
- DPI 및 해상도 변경에 따른 Layout Break (화면 깨짐):
- 의심 시나리오: 사무실 개발 PC(FHD 100%)에서는 완벽했는데, 현장 설비 PC가 UHD(4K) 모니터에 디스플레이 배율 150%로 설정되어 있습니다. 절대 좌표(Location = new Point(x,y))로 화면을 짰다면 버튼들이 겹치고 그리드가 화면 밖으로 가출합니다.
- 방어 분석: 오직 Header 창만 SizeType.Absolute(60px)로 고정하고, 나머지 모든 영역을 70:30, 40:40:20의 SizeType.Percent 비율로 묶었습니다. 모니터 해상도나 창 크기가 어떻게 변하든 황금 비율을 철저하게 유지합니다.
- UI 렌더링 데드락 및 로딩 지연 방지:
- 의심 시나리오: 폼 생성자에서 컨트롤을 수십 개 추가하면, 컨트롤이 하나 붙을 때마다 WinForms는 WM_PAINT 메시지를 발생시켜 UI 스레드를 갉아먹고, 프로그램 켜지는 데만 수 초가 걸립니다.
- 방어 분석: 조립 전 this.SuspendLayout()를 호출하여 그리기 이벤트를 멈추고 메모리 상에서 완벽히 조립한 뒤, 마지막에 this.ResumeLayout(false)로 한 번만 렌더링을 지시하여 로딩 속도를 극한으로 끌어올렸습니다.
반응형