Quick JIT を無効

.Net 7 以降は、Quick JIT を無効にするために、アプリケーションプロジェクトのプロジェクトファイル (.csproj) を編集するとよい。

<Project Sdk="Microsoft.NET.Sdk">
  ・・・・・
  <PropertyGroup>
    ・・・・・
    <TieredCompilationQuickJit>false</TieredCompilationQuickJit>
    ・・・・・
  </PropertyGroup>
  ・・・・・
</Project>

アプリケーションの起動時間は遅くなるが、最適化が進み実行速度が向上すると思われる

参考: https://qiita.com/rougemeilland/items/b8b4b045b82a294a56de


整数値nについて、0<= n && n<MAXの判定

if (n >= 0 && n < MAX)

と書くのではなく、

if ((uint)n < (uint)MAX)

と書くべし。参照を減らすことが出来る。uintへのキャストのコストはほぼない。


ArrayPool<T>.Shared

ループの中などで使用する一時的な配列はnew [] せずに、以下のように配列を確保すべし。メモリ効率が高く、速度も速い。 GCもなし。

byte[] array = ArrayPool<byte>.Shared.Rent(20);// バッファを取得

//arrayを使った処理

ArrayPool<byte>.Shared.Return(array);// 借りたバッファを返す

参考: https://ikorin2.hatenablog.jp/entry/2021/12/20/225208


.Where(…).Select(…)

whereとselectはこの順番で続けて使うべし。JITが最適化してくれる。


#if DEBUG を使わないデバッグ分岐

以下のような静的クラスを作成し、AssemblyState.IsDebugを判定文の中で使う。

internal static class AssemblyState {
  public const bool IsDebug =>
  #if DEBUG
    true;
  #else
    false;
  #endif
}

コードが短くなるし、実行速度にも影響なし。

参考: https://ikorin2.hatenablog.jp/entry/2020/06/27/065646


数字に stとかthを追加した文字列で返す

 public static string Ordinal(this int number)
 {
     var ones = number % 10;
     var tens = Math.Floor(number / 10f) % 10;
     if (tens == 1)
         return number + "th";
     else return ones switch
     {
         1 => number + "st",
         2 => number + "nd",
         3 => number + "rd",
         _ => number + "th",
     };
 }
contents