.netでSQLiteを使う
原文:
http://www.cnblogs.com/yelsea/archive/2007/06/21/792314.html
本人がvs 2008で使った結果
1.その事務のコードが追加されていない場合
2.コードを修正した後
マシンの設定:
Intelクール叡2双核E 8400
2 Gメモリ
なぜ単純に一つの事務を使うだけでこんなに大きな差がありますか?とても簡単で、SQLiteが不足しています。各操作のために一つの業務を開始します。1000回以上のコードを挿入して最低1000個の業務を始めました。実は、これはデータベースの操作の基本的な常識です。皆さん、覚えてください。悪いコードの効率が悪いのは少しもないです。
原作者に感謝します。
http://www.cnblogs.com/yelsea/archive/2007/06/21/792314.html
本人がvs 2008で使った結果
1.その事務のコードが追加されていない場合
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using System.Data.Common;
- using System.Data.SQLite;
- using System.Diagnostics;
-
- namespace CApp
- {
- class Program
- {
- static void Main(string[] args)
- {
- System.IO.File.Delete("test.db");
- SQLiteConnection.CreateFile("test.db");
- DbProviderFactory factory = SQLiteFactory.Instance;
- using (DbConnection conn = factory.CreateConnection())
- {
- //
- conn.ConnectionString = "Data Source=test.db";
- conn.Open();
-
- //
- string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
- DbCommand cmd = conn.CreateCommand();
- cmd.Connection = conn;
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
-
- //
- cmd.Parameters.Add(cmd.CreateParameter());
-
- //
- Stopwatch watch = new Stopwatch();
- watch.Start();
-
- //DbTransaction trans = conn.BeginTransaction();
- //try
- //{
- // 1000
- for (int i = 0; i < 1000; i++)
- {
- cmd.CommandText = "insert into [test1] ([s]) values (?)";
- cmd.Parameters[0].Value = i.ToString();
-
- cmd.ExecuteNonQuery();
- }
- //trans.Commit();
- //}
- //catch
- //{
- // trans.Rollback();
- // throw;
- //}
-
- //
- watch.Stop();
- Console.WriteLine(watch.Elapsed);
- Console.Read();
- }
- }
- }
- }
運転結果用の場合:00:01:11.5081320で、1分11秒以上かかりました。2.コードを修正した後
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using System.Data.Common;
- using System.Data.SQLite;
- using System.Diagnostics;
-
- namespace CApp
- {
- class Program
- {
- static void Main(string[] args)
- {
- System.IO.File.Delete("test.db");
- SQLiteConnection.CreateFile("test.db");
- DbProviderFactory factory = SQLiteFactory.Instance;
- using (DbConnection conn = factory.CreateConnection())
- {
- //
- conn.ConnectionString = "Data Source=test.db";
- conn.Open();
-
- //
- string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
- DbCommand cmd = conn.CreateCommand();
- cmd.Connection = conn;
- cmd.CommandText = sql;
- cmd.ExecuteNonQuery();
-
- //
- cmd.Parameters.Add(cmd.CreateParameter());
-
- //
- Stopwatch watch = new Stopwatch();
- watch.Start();
-
- DbTransaction trans = conn.BeginTransaction();
- try
- {
- // 1000
- for (int i = 0; i < 1000; i++)
- {
- cmd.CommandText = "insert into [test1] ([s]) values (?)";
- cmd.Parameters[0].Value = i.ToString();
-
- cmd.ExecuteNonQuery();
- }
- trans.Commit();
- }
- catch
- {
- trans.Rollback();
- throw;
- }
-
- //
- watch.Stop();
- Console.WriteLine(watch.Elapsed);
- Console.Read();
- }
- }
- }
- }
本人のマシンの運行結果は00:00:00.0724826つまり0.07秒です。マシンの設定:
Intelクール叡2双核E 8400
2 Gメモリ
なぜ単純に一つの事務を使うだけでこんなに大きな差がありますか?とても簡単で、SQLiteが不足しています。各操作のために一つの業務を開始します。1000回以上のコードを挿入して最低1000個の業務を始めました。実は、これはデータベースの操作の基本的な常識です。皆さん、覚えてください。悪いコードの効率が悪いのは少しもないです。
原作者に感謝します。