Start Debugging

dotnet

440 件 · ページ1/44

yield return イテレーターと List<T> を返す方法の比較: C# で IEnumerable を返すメソッドの本当のコスト

yield return メソッドは、生成する要素数に関係なく、呼び出しごとに 40 バイトのステートマシンオブジェクト 1 つ分のコストがかかります。List<T> は内部配列全体を先に確保します。.NET 10.0.10 で計測した結果、メモリと早期終了ではイテレーターが有利で、呼び出し側が複数回列挙する場合、Count が必要な場合、ToList() を呼ぶ場合は List<T> が有利でした。

.NET における FileSystemInfo.LastWriteTime セッターと File.SetLastWriteTime の違い

どちらも最終的には同じ OS 呼び出しに行き着くため、書き込まれるタイムスタンプは同一です。違いはその周辺にあります。どのキャッシュが無効化されるか、Windows でディレクトリを扱えるか、UTC 以外の DateTime がどう変換されるか、開いているハンドルを対象にできるか、です。File.SetLastWriteTimeUtc を使い、ファイルが開いている場合はハンドル経由で設定してください。.NET 10.0.10 で検証済みです。

Marten 9.55 がドキュメントテーブル名のトルコ語 I 問題を修正: アップグレード前にリネームしてください

Marten 9.55.0 は、ドキュメントのエイリアス、DDL テンプレートのキー、フラットテーブルの upsert 関数名を invariant culture で小文字化するようになりました。tr-TR や az-AZ で動作し、mt_doc_ınvoice のようなテーブルにドキュメントを保存しているアプリは、先にリネームしないとデータが消えたように見えます。

C# の ref T ループと Span<T> インデックスの比較: .NET 10 で Span 版が同等以上に速い理由

.NET 10 では、span.Length を上限にした単純な for ループ span[i] は、境界チェックなし、ストレングスリダクション済み、カウントダウン形式のループにコンパイルされます。int インデックスで手書きした Unsafe.Add(ref r, i) ループは符号拡張と加算方向の比較が残り、計測では 2 から 5% 遅くなりました。.NET 10.0.10 の arm64 と x64 のベンチマークと JIT 逆アセンブルを紹介します。
次へ