이 프로젝트의 모든 주목할 만한 변경 사항은 이 파일에 문서화됩니다.
형식은 Keep a Changelog를 기반으로 하며, 이 프로젝트는 유의적 버전을 따릅니다.
- MessagePool 완전 제거 - API 단순화를 위해 MessagePool 클래스 및 관련 코드 모두 삭제
MessagePool.cs삭제MessagePoolTests.cs삭제ReinitializeZmqMsgTests.cs삭제Message.cs에서 풀 관련 필드/메서드 제거 (_poolDataPtr,_isFromPool,PrepareForReuse()등)Socket.cs에서Recv(Message, int expectSize)오버로드 제거- 벤치마크에서 MessagePooled 관련 테스트 제거
- Message 클래스 단순화 - 풀링 관련 코드 제거로 더 깔끔한 구조
Size,Data,DataPtr속성에서 풀 관련 분기 제거Send(),Dispose()메서드 단순화
- 메시지 버퍼 전략 4가지로 정리
- ByteArray (Baseline)
- ArrayPool (≤1KB 권장)
- Message
- MessageZeroCopy (특수 케이스용)
- 벤치마크 문서 전면 업데이트 (
docs/benchmarks.md,docs/benchmarks.ko.md)- MessagePool 관련 내용 모두 제거
- MessageZeroCopy 권장 제거 (대부분의 경우 Message보다 느림)
- GC 최적화 설정 섹션 추가 (Server GC + Batch Latency Mode)
- README 업데이트 - 4가지 전략 기반 권장사항
- 벤치마크 README 업데이트 - 최신 결과 반영
- ≤1KB 메시지: ArrayPool 사용 (최고 성능, 최소 GC)
- ≥64KB 메시지: ArrayPool 또는 Message 사용
- ≥128KB 메시지: ArrayPool 또는 Message (ByteArray 대비 3.5배 이상 빠름)
- MessageZeroCopy: 이미 네이티브 메모리가 있는 특수한 경우에만 사용
- SetActualDataSize() public API - 풀링된 메시지에서 Data Span에 직접 쓴 후 실제 데이터 크기 설정 가능
- MessagePool - 고성능 시나리오를 위한 스레드 로컬 캐시가 포함된 네이티브 메모리 버퍼 재사용
- MessagePool 벤치마크 - 다른 메모리 전략과의 성능 비교
- 애플리케이션 레벨 에러 코드 - ZmqConstants에
EBUFFERSMALL및ESIZEMISMATCH상수 추가 - 설명적인 예외 메시지 - 버퍼 검증 에러에 대해 의미 있는 에러 설명 포함
- ZmqException 개선 - 버퍼 검증 에러가 errno에 의존하지 않고 특정 에러 코드와 설명 메시지와 함께 throw됨
- 벤치마크 공정성 - 정확한 성능 측정을 위해 공유 수신 버퍼 제거
- Send()가 bool 반환 - 논블로킹 전송의 성공/실패 표시
- Poller를 인스턴스 기반 설계로 리팩토링 - 제로 할당 폴링
- MessageBufferStrategyBenchmarks를 순수 블로킹 모드로 변경 - 정확한 측정을 위해
- TryRecv() 메서드 - 명시적 성공 표시자를 가진 논블로킹 수신
- PureBlocking 모드 - 정확한 비교를 위한 ReceiveModeBenchmarks에 추가
- 128KB 및 256KB 메시지 크기 테스트 - 벤치마크에 추가
- 한국어 번역 - 모든 문서, 샘플, 템플릿
- DocFX 문서 - GitHub Pages 배포
- LOH (Large Object Heap) 영향 분석 - 벤치마크 문서에 추가
- 단일 전략 권장 섹션 - 일관된 성능을 위해 Message 권장
- RecvBytes() 및 TryRecvBytes() - 이중 복사와 GC 압력 유발;
Recv(Span<byte>)또는Recv(Message)사용 권장 - MessagePool - 벤치마크 결과에 따라 메시지 버퍼 전략 단순화
- 새로운 수신 모드 및 메시지 버퍼 전략으로 벤치마크 결과 업데이트
- 메시지 크기별 메시지 버퍼 전략 선택 가이드 추가
- 주요 발견사항 문서화:
- 단일 소켓: PureBlocking 권장
- 다중 소켓: Poller 권장
- 메시지 버퍼: Message 권장 (GC 프리, 일관된 성능)
- MessageZeroCopy는 256KB 이상에서 유리
- 초기 릴리스
- 옵션 지원을 포함한 컨텍스트 관리
- 모든 소켓 타입 (REQ, REP, PUB, SUB, PUSH, PULL, DEALER, ROUTER, PAIR, XPUB, XSUB, STREAM)
- Span 지원을 포함한 메시지 API
- 폴링 지원
- Z85 인코딩/디코딩 유틸리티
- CURVE 키 생성 유틸리티
- 프록시 지원
- SafeHandle 기반 리소스 관리
- Bind/Connect/Unbind/Disconnect
- 여러 오버로드를 사용한 Send/Recv
- 논블로킹 작업을 위한 TrySend/TryRecv
- 완전한 소켓 옵션 지원
- PUB/SUB 패턴을 위한 Subscribe/Unsubscribe
- Windows x64, x86, ARM64
- Linux x64, ARM64
- macOS x64, ARM64 (Apple Silicon)
- NetZeroMQ: cppzmq 스타일 인터페이스를 갖춘 고수준 API
- NetZeroMQ.Core: 저수준 P/Invoke 바인딩
- NetZeroMQ.Native: 멀티 플랫폼 지원을 갖춘 네이티브 라이브러리 패키지
- Span를 사용한 제로카피 작업
- SafeHandle을 사용한 효율적인 메모리 관리
- 직접 P/Invoke를 통한 네이티브 성능
- 포괄적인 널 참조 타입 주석
- SafeHandle 기반 리소스 정리
- 스레드 안전 소켓 작업