2026-09-12 comparisoncsharpdotnet C# で重複キーを扱うなら Lookup<TKey, TElement> か Dictionary<TKey, List<TValue>> か 一度グループ化して読むだけなら ToLookup を使います。不変で、存在しないキーには空のシーケンスを返し、null キーを受け付け、最初に現れた順序を保ちます。構築後にグループが変化する場合や JSON の境界をまたぐ場合は Dictionary<TKey, List<TValue>> を使います。
2026-09-07 dotnetdotnet-11csharp .NET MAUI の Android アプリで ANR を引き起こす async void ハンドラーを見つける方法 Play Console は ANR 率が 0.47% を超えたと伝え、libcoreclr.so のフレームだらけのネイティブスタックトレースを渡してきます。その役に立たないトレースから、メインスレッドをブロックした async void イベントハンドラーそのものへたどり着く方法を、Looper の printer、状態マシン名を出す SynchronizationContext ラッパー、dsrouter 経由の dotnet-trace で解説します。
2026-09-04 dotnetnative-aotjit .NET の W^X フラグとは何か、Native AOT はそれを必要とするのか? W^X (write xor execute) は、いかなるメモリページも書き込み可能と実行可能を同時に満たさないという規則です。.NET では DOTNET_EnableWriteXorExecute というノブとして公開され、.NET 7 以降は既定で有効で、その存在理由はもっぱら JIT にあります。Native AOT はこのノブを一度も読みません。ランタイムがどう実装しているか、何を犠牲にするか、そして無効化が正当な対処になるのはどんなときかを解説します。
2026-09-01 comparisoncsharpcsharp-14 C# のリポジトリメソッドで Task を直接返す vs async/await でパススルーする: どちらを使うべきか リポジトリのパススルーメソッドで async/await を省略すると約 6 ns と 72 バイトを節約できますが、スタックフレーム、try/catch のセマンティクス、安全なリソース破棄を失います。計測済みのホットパス上の純粋なパススルーでない限り、return await を残してください。
2026-08-31 comparisonautomappermapperly AutoMapper と Mapperly と手書きマッピングの比較 (2026年版) 新しい .NET コードでは Mapperly が既定の選択です。手書きマッピングと同等の速度で、Native AOT でも動作し、マップ漏れをコンパイル時に検出します。ProjectTo では AutoMapper が依然として優位です。ベンチマークとライセンスのしきい値付き。
2026-08-23 csharplinqdotnet C# で IEnumerable<T> がすでにマテリアライズ済みかどうかを判定する方法 IEnumerable<T> に HasBeenEnumerated フラグはありません。TryGetNonEnumeratedCount が実際に何を調べているのか、なぜ Enumerable.Range が ICollection<T> のテストを通過するのか、そして無駄な ToList() を避けるガードを解説します。
2026-08-18 errorsdotnetlogging 解決: CA1873 "Evaluation of this argument may be expensive and unnecessary if logging is disabled" CA1873 は暗黙の params object[] 配列に反応するため、ほぼすべての LogDebug 呼び出しで発生します。[LoggerMessage] か IsEnabled ガードで解決します。
2026-08-15 comparisondotnetdotnet-11 .NET 11 のレスポンス圧縮における Zstandard と Brotli と Gzip の比較 .NET 11 の動的な API レスポンスには Zstandard が正しい既定値ですが、ASP.NET Core のプロバイダーが出荷時に設定している品質のままではいけません。実際の JSON ペイロードを使ったベンチマークで、品質 1 が既定の品質 3 をサイズと CPU の両方で上回る理由、Brotli が今も勝つ場面、そして Gzip が互換性のためのフォールバックとしてのみ残る理由を示します。
2026-08-02 csharpdotnetdotnet-11 ASP.NET Core 11 で Kestrel に HTTP/3 を配信させる設定方法 ASP.NET Core 11 で Kestrel の HTTP/3 を有効にするための完全ガイドです。HttpProtocols.Http1AndHttp2AndHttp3 によるエンドポイント設定、Windows / Linux / macOS における MsQuic のプラットフォーム要件、最初のリクエストが決して HTTP/3 にならない理由、HttpClient とミドルウェアによる確認方法、QuicTransportOptions のチューニング、そして黙ってフォールバックさせてしまうファイアウォールとプロキシの落とし穴を扱います。
2026-08-02 csharpdotnetdotnet-11 .NET 11 で new Regex(...) を [GeneratedRegex] ソースジェネレーターに置き換える方法 .NET 11 で new Regex(pattern, RegexOptions.Compiled) を [GeneratedRegex] に変換する完全ガイドです。機械的な書き換え、部分メソッドと部分プロパティの違い、実測した起動時間とスループット、SYSLIB1040-1045 の診断、そしてジェネレーターが黙ってキャッシュ済み Regex にフォールバックする 2 つのパターンを扱います。