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",
};
}