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 再帰关数の书き方