Start Debugging

linq

13 件 · ページ1/2

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

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

C# でヒープ割り当てなしに 2 つのコレクションを並行して反復処理する方法

Enumerable.Zip は呼び出しごとに 144-208 バイトを割り当て、単純なループより約 10 倍遅く動作します。配列やリストであれば、同じ長さにスライスした 2 つの span に対する for ループが割り当てゼロで最速の選択肢です。foreach 構文を使いたい場合は、小さな ref struct の zip 列挙子でその 25% 以内に収まります。.NET 10.0.10 と .NET 11 RC 3 で計測しました。

EF Core 11 で EF.Functions.Like と StartsWith クエリの % と _ ワイルドカードをエスケープする方法

EF Core 11 では StartsWith、EndsWith、Contains が % と _ を自動でエスケープしますが、EF.Functions.Like はエスケープしません。EF が生成する SQL、再利用できるエスケープヘルパー、そして SQL Server、SQLite、PostgreSQL で正しく動作させるための escapeCharacter オーバーロードを解説します。
次へ