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}ミリ秒");

C#のSQLiteでオンメモリで実行する

":memory:"で指定して ";mode=memory;cache=shared"; を付けて使う

public abstract class SqliteBase
{
    public string ConnectionString;

    protected SqliteBase()
    {      
        SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder
        {
            DataSource = ":memory:",
            ForeignKeys = true,
            DefaultTimeout = 3,
            DateTimeKind = DateTimeKind.Utc,
            Pooling = false             
        };

        ConnectionString = builder.ConnectionString + ";mode=memory;cache=shared";
    }

    private DbConnection _MemoryConnection;
    protected DbConnection GetConnection()
    {
        try
        {
            if (_MemoryConnection == null)
            {
                _MemoryConnection = new SQLiteConnection(ConnectionString);                    
                _MemoryConnection.Open();
            }

            DbConnection dbConnection = new SQLiteConnection(ConnectionString);
            dbConnection.Open();

            return dbConnection;
        }