C#のint.ParseとConvert.ToInt32の違い

Parse, Convertともに、数値に変換出来る文字列は “12345” や “123.45” などの正しい数値を表す文字列のみ。
文字列の前後、途中に数値以外の文字、スペースなどが入っていると例外が出る。
Parse, Convertともに、文字列の先頭に沢山の0(ゼロ)が付いていても数値変換出来る。
Parse, Convertともに、”0xFFFF” などの形式も例外になる。16進数とは認識出来ない。
Parse, Convertともに、Doubleへの変換は浮動小数点形式でも可能。
Parse, Convertともに、空文字列 “” は例外が出る。
Parseは null も例外になる。
Convertは null は 0(ゼロ)になる。

C#でJSONのシリアライズ/デシリアライズ

Json.NETで。

シリアライズ

string ret = JsonConvert.SerializeObject(hoge);

デシリアライズ

var settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore, // nullの場合はクラスのプロパティを無視する
    MissingMemberHandling = MissingMemberHandling.Ignore // プロパティがデシリアラズする側に存在しない場合は無視
};
Hoge hoge = JsonConvert.DeserializeObject<Hoge>(json, settings);

Core 3.0以降なら System.Text.Json がいいかも。Microsoft公式だし。

SQLiteでdatabase is lockedがでるときには仕様を把握しよう

SQLiteは
暗黙のトランザクション処理とオートコミットといった機能があるのでお手軽な反面、
アクセスが頻繁な処理を作ると、思った以上の
トランザクションの開始やコミットが発生し、ジャーナルファイルの生成と削除が 繰り返されるため、トランザクションでくくって一括して処理する場合に比べて 処理が大幅に遅くなります。

C#でデバッグ用時間計測

C#でStopwatchクラスを使用

// using System;

// Stopwatchクラス生成
var sw = new System.Diagnostics.Stopwatch();

//-----------------
// 計測開始
sw.Start();

// ★処理A

// 計測停止
sw.Stop();

// 結果表示
Console.WriteLine("■処理Aにかかった時間");
TimeSpan ts = sw.Elapsed;
Console.WriteLine($" {ts}");
Console.WriteLine($" {ts.Hours}時間 {ts.Minutes}分 {ts.Seconds}秒 {ts.Milliseconds}ミリ秒");
Console.WriteLine($" {sw.ElapsedMilliseconds}ミリ秒");