[Deep Dive] C# & C++ 하이브리드 설계로 구현한 고성능 캡처 엔진: GurupiaCapture

**'지연 시간 제로'**와 **'최저 CPU 점유율'**이라는 두 마리 토끼를 잡는 것은 쉽지 않습니다. GurupiaCapture 프로젝트를 통해 윈도우 환경에서 시스템 리소스를 극한으로 활용하는 아키텍처를 설계하고 구현한 과정을 공유합니다.

GurupiaCapture는 원격제어의 자체엔진에 사용할 수 있도록 리팩토링 된 상태로 더이상 개발을 하지 않고 소스와 문서 파일 정리만 하고 있습니다.

1. 하이브리드 아키텍처 설계 (The Architecture)

GurupiaCapture는 생산성과 성능의 균형을 위해 **C#(.NET)**과 **C++(Win32/DirectX)**를 명확히 분리하여 설계했습니다.

계층별 역할 정의

  1. Application Layer (C#): 세션 상태 관리, 네트워크 핸들링, 사용자 환경 설정(UI). .NET의 강력한 비동기 프로그래밍 모델을 활용하여 로직의 안정성을 확보합니다.
  2. Interop Layer (P/Invoke): C#과 C++ 사이의 고속 데이터 통로입니다. 마샬링 오버헤드를 줄이기 위해 포인터를 직접 공유하는 방식을 취합니다.
  3. Engine Layer (C++): 윈도우 커널 및 GPU와 직접 대화합니다. DXGI Desktop Duplication API를 호출하여 픽셀 데이터를 획득하고 성능 최적화(SIMD 등)를 수행합니다.

2. DXGI 기반 고속 미디어 파이프라인

전통적인 GDI 방식은 CPU가 화면을 하나하나 그려야 하므로 고해상도에서 급격한 성능 저하가 발생합니다. GurupiaCapture는 GPU 메모리에 직접 접근하는 DXGI(DirectX Graphics Infrastructure) 파이프라인을 구축했습니다.

기술적 핵심 요소

  • Direct Access: GPU 비디오 메모리에 생성된 프레임을 CPU로 복사하지 않고 인코딩 엔진으로 직접 전달(Zero-copy)을 시도합니다.
  • Dirty Rect Detection: 이전 프레임 대비 변경된 영역만 감지하여 업데이트함으로써 불필요한 연산량을 80% 이상 절감합니다.

3. 로우레벨 데이터 처리 최적화 (Infographic)

데이터가 하드웨어에서 애플리케이션까지 전달되는 과정은 아래와 같은 정밀한 파이프라인을 거칩니다.

코드 스니펫
 

 

graph TD
    A[Windows Kernel / Desktop] -->|DXGI| B(GPU Frame Buffer)
    B -->|Shared Surface| C{Capture Core C++}
    C -->|Dirty Rect Filter| D[Pixel Data Processing]
    D -->|Pointer Sharing| E{Interop Layer}
    E -->|Memory Mapping| F[C# Application]
    F -->|Packetizing| G[Network / WebRTC]
    
    style C fill:#f96,stroke:#333,stroke-width:2px
    style E fill:#69f,stroke:#333,stroke-width:2px

4. 시스템 아키텍트의 최적화 가이드

이 프로젝트에서 성능을 위해 적용한 핵심 지침(Core Principles)들입니다.

Zero-Allocation 전략

C#의 가비지 컬렉터(GC)에 의한 'Stop-the-world' 현상은 실시간 원격 제어에서 치명적입니다. 이를 방지하기 위해:

  • Pinned Memory: fixed 구문을 사용하여 메모리 주소를 고정하고 C++ 레이어와 직접 공유합니다.
  • Struct over Class: 작은 데이터 단위는 구조체를 사용하여 스택 메모리를 활용합니다.

멀티스레딩 및 동기화

  • 캡처 스레드와 전송 스레드를 엄격히 분리하고, Lock-free Queue를 활용하여 데이터 경합(Contention)을 최소화했습니다.

5. 마치며: 기술적 가치와 확장성

GurupiaCapture는 단순한 툴을 넘어, 시스템 프로그래밍의 정수를 담고 있습니다. C++/C#의 상호운용성을 극대화한 이 설계는 차후 Rust 기반 모듈이나 AI 기반 프레임 보간 엔진으로 확장하기에 매우 유연한 구조를 가지고 있습니다.

[Project Repository] - 비공개 저장소 이므로 담당 개발자 이외의 접근불가.

👉 https://github.com/gurupia/GurupiaCapture


Posted by gurupia
,