공통 창 관리 최적화와 강한 스트레스 테스트
개발 기록 · 블로그 공개
원본 기록 상태 완료
실제24개 창 조회 구간94.7% 감소. 미저장 제목 버그를 수정하고 논리 스트레스·실제4000회 부하·마우스60회를 검증했습니다.

작업 결과
Templete1.2.6 공통 창 관리 리팩토링·미저장 제목 판별 수정·9238f018 푸시 완료. 실제24개 창 상태 보존과 최종 실제 클릭 검증 통과.
적용 내용
창 등록 시 같은 ID의 재검색을 생략하고 구성원 변경 때만 읽기 전용 목록 스냅샷을 갱신합니다. 발견 자체는 계속 수행해 닫힌 창·이름 변경을 시간 캐시 뒤에 숨기지 않습니다. 포커스 갱신은 창마다 상태를 한 번 읽고 같은 Z 값의 순서를 보존합니다.
선택적 IWindowFocusReadHost를 추가했습니다. DataTable 호스트는 한 관찰 안에서 Win32 후보·위치·제목을 한 번 읽어 두 제품이 공유합니다. 관찰이 끝나면 해제하며 프레임을 넘어 유지하지 않습니다. 기존 호스트 API는 유지하고 지원하지 않는 호스트는 기존 경로로 동작합니다. 빈 목록은 네이티브 관찰을 시작하지 않습니다.
검증
| 측정 범위 | 변경 전 | 변경 후 |
|---|---|---|
| 128개 논리 창: 포커스 갱신500회 | 1440.93ms /조회128500회 | 33.79ms /조회64000회 |
| 실제24개 창: 상태 조회200회 | 관찰 공유 없음2.926초 | 공유 적용3회 중앙값0.1557초 |
| 실제24개 창: 선택3000회+최소화·복원1000회 | 297.59초 | 148.14초 |
위 수치는 특정 조회/시험 구간입니다. 전체 렌더링 속도나 FPS가94.7% 개선됐다는 의미가 아닙니다. 네이티브 A/B의 공유 없음은1개 유효 표본, 공유 적용은3개 표본이며 다른 PC 부하의 영향은 배제하지 못했습니다.
최대128개 논리 창에서 무작위 등록·ID·최소화5만 회, 포커스·순서1만 회, 순서 계획10만 회, 생성·파괴12800회가 포함된11259개 검증을 통과했습니다. 별도로 생성·파괴12800회 후 잔존 Unity 시험 창0개를 확인했습니다. 기존 회귀에 제목 판별8개를 더한206개 통과. 실제 핸들2400개 대조와 중첩·역순·중복·예외 해제, 빈 목록 및1000회 관찰 해제도 통과했습니다.
최종24개 실제 창에서 엔진 선택3000회·최소화/복원1000회 후 창 ID24개와 Pixora 디자인 값·DataTable 미저장 세션이 동일했습니다. 마지막 빈 목록 조기 반환은 그 이후 추가한0개 창 경로로, 별도 ScopeContract와 실제60클릭으로 재검증했습니다.
실제 마우스 목록 클릭60회 통과. 버튼 놓기 후 상태 확인 중앙값17ms/P95 41ms/최대170ms(누르기80ms 별도). 캡처248개에서 어느 한 도구의 덮임0개, 문서 SHOW/HIDE0개. 최대 표본 간격265ms이므로 모든 중간 영상 프레임을 보증하지 않습니다.
1000×720, Pixora PNG93448→WebP51254바이트, DataTable79509→40986바이트. 런타임 대상 소스는 QA 복사본과 일치했습니다. json).
개발 화면

