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`や独自実装による比較方法は避けるべきだと結論付けています。

続きを読む