CoreWCF 스트리밍 RPC 성능 병목 현상: Stack Overflow 질문 실패 후 분석

2025-05-08
CoreWCF 스트리밍 RPC 성능 병목 현상: Stack Overflow 질문 실패 후 분석

저자는 난수 전송 처리량을 테스트하기 위해 CoreWCF를 사용하여 .NET Framework와 .NET 8 간의 스트리밍 RPC를 시도했습니다. 하지만 Stack Overflow에 질문을 게시한 후 답변 없이 닫혔습니다. 문제는 클라이언트가 연결을 끊은 후에도 CoreWCF 서비스가 많은 CPU를 계속 소모하고 스트림에 계속 쓰는 것입니다. 저자는 WCF 스트림 작동에 대한 오해를 의심하며, WCF 스트림은 길이를 알 수 없는 스트림 처리에는 적합하지 않을 수 있다고 제안합니다. 이 글에서는 고처리량 RPC에서 WCF 스트리밍을 사용하는 데 따르는 과제를 살펴보고, 단일 메시지 요청이나 세션 모드 사용 등의 대안을 고려합니다.

더 보기
개발

Span<T>가 memcmp를 압도하다: .NET 바이트 배열 비교 성능 대폭 향상

2025-03-30
Span<T>가 memcmp를 압도하다: .NET 바이트 배열 비교 성능 대폭 향상

이 글에서는 `memcmp`, 루프, `Enumerable.SequenceEqual`, `Span.SequenceEqual` 등 다양한 방법을 사용한 .NET 환경에서의 바이트 배열 비교 성능을 벤치마킹합니다. 결과적으로 .NET 8 이상에서는 `Span.SequenceEqual`이 최고의 성능을 보이며, `memcmp` 및 기존 루프 방식을 훨씬 능가하는 것으로 나타났습니다. 작은 배열에서는 루프가 가장 빠르지만, 배열 크기가 커짐에 따라 `Span.SequenceEqual`의 우위가 두드러집니다. 따라서 .NET 8 이상에서는 `IEnumerable.SequenceEqual`을, .NET Framework에서는 `Span.SequenceEqual`을 사용하고, `memcmp` 및 사용자 정의 구현은 피하는 것이 좋다는 결론입니다.

더 보기