csharp SQLiteの书き込み速度アップ(SyncMode,JournalMode)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp SQLiteの书き込み速度アップ(SyncMode,JournalMode)相关的知识,希望对你有一定的参考价值。

namespace SqlitePerformance
{
  using System;
  using System.Collections.Generic;
  using System.Data.SQLite;
  using System.Diagnostics;
  using System.Linq;

  using Dapper;


  class Program
  {
    static void Main(string[] args)
    {
      var prg = new Program();
      prg.Go();

      Console.WriteLine("Press any key to exit...");
      Console.ReadKey();
    }

    public void Go()
    {
      //
      // PRAGMAの以下の項目の設定次第で書き込み速度が変わる。
      //   ・SyncMode
      //   ・JournalMode
      // SyncMode=OFF, JournalMode=Memoryの組合せが一番速い.
      // ただし、SyncMode=OFFにすると同期を取らなくなるので
      // そこが心配な場合は、SyncMode=Normal, JournalMode=Walの
      // 組合せが速度も速くてベター。
      // 
      // Walが選択できるのは、バージョンが3.7.0以降となる。
      //
      var builder = new SQLiteConnectionStringBuilder()
      {
        DataSource = "test.db",
        Version = 3,
        LegacyFormat = false,
        SyncMode = SynchronizationModes.Off,
        JournalMode = SQLiteJournalModeEnum.Memory
      };

      using (var conn = new SQLiteConnection(builder.ToString()))
      {
        conn.Open();

        try { conn.Execute("drop table table1"); } catch {}
        try { conn.Execute("create table table1 (id integer primary key, name text)"); } catch {}

        var totalWatch = Stopwatch.StartNew();
        for (int i = 0; i < 100; i++)
        {
          using (var tran = conn.BeginTransaction())
          {
            var watch = Stopwatch.StartNew();
            conn.Execute(string.Format("insert into table1 values ({0}, 'name-{1}')", i, i));
            tran.Commit();
            watch.Stop();

            Console.WriteLine("\t{0}: {1} microseconds", i, watch.ElapsedMicroseconds());
          }
        }

        totalWatch.Stop();
        Console.WriteLine("TOTAL: {0} milliseconds", totalWatch.ElapsedMilliseconds);
        Console.WriteLine("ConnectionString: {0}", builder.ToString());
      }
    }
  }

  public static class StopwatchExtensions
  {
    public static long ElapsedMicroseconds(this Stopwatch self)
    {
      return (self.ElapsedTicks * (1000 * 1000) / Stopwatch.Frequency);
    }
  }
}

以上是关于csharp SQLiteの书き込み速度アップ(SyncMode,JournalMode)的主要内容,如果未能解决你的问题,请参考以下文章

java 「结束」と入力があるまでテキストファイルに追加书き込みをする

csharp C#5.0 async / awaitでの主要メソッドの书き方

csharp WPFFollowPopup(PlacementTargetに追随するポップアップ)

csharp WPFDraggablePopup(ドラッグ可能なポップアップ)

csharp Task.WhenAllを利用している场合のタイムアウト处理の书き方(Task.WhenAll,Task.WhenAny,Task.Delay)

markdown 再帰关数の书き方