.netでSQLiteを使う


原文:
http://www.cnblogs.com/yelsea/archive/2007/06/21/792314.html
本人がvs 2008で使った結果
1.その事務のコードが追加されていない場合
 

  
  
  
  
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Data; 
  6. using System.Data.Common; 
  7. using System.Data.SQLite; 
  8. using System.Diagnostics; 
  9.  
  10. namespace CApp 
  11.     class Program 
  12.     { 
  13.         static void Main(string[] args) 
  14.         { 
  15.             System.IO.File.Delete("test.db"); 
  16.             SQLiteConnection.CreateFile("test.db"); 
  17.             DbProviderFactory factory = SQLiteFactory.Instance; 
  18.             using (DbConnection conn = factory.CreateConnection()) 
  19.             { 
  20.                 //   
  21.                 conn.ConnectionString = "Data Source=test.db"
  22.                 conn.Open(); 
  23.  
  24.                 //   
  25.                 string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)"
  26.                 DbCommand cmd = conn.CreateCommand(); 
  27.                 cmd.Connection = conn; 
  28.                 cmd.CommandText = sql; 
  29.                 cmd.ExecuteNonQuery(); 
  30.  
  31.                 //   
  32.                 cmd.Parameters.Add(cmd.CreateParameter()); 
  33.  
  34.                 //   
  35.                 Stopwatch watch = new Stopwatch(); 
  36.                 watch.Start(); 
  37.  
  38.                 //DbTransaction trans = conn.BeginTransaction(); 
  39.                 //try 
  40.                 //{ 
  41.                     //  1000  
  42.                     for (int i = 0; i < 1000; i++) 
  43.                     { 
  44.                         cmd.CommandText = "insert into [test1] ([s]) values (?)"
  45.                         cmd.Parameters[0].Value = i.ToString(); 
  46.  
  47.                         cmd.ExecuteNonQuery(); 
  48.                     } 
  49.                     //trans.Commit(); 
  50.                 //} 
  51.                 //catch 
  52.                 //{ 
  53.                 //    trans.Rollback(); 
  54.                 //    throw; 
  55.                 //} 
  56.  
  57.                 //   
  58.                 watch.Stop(); 
  59.                 Console.WriteLine(watch.Elapsed); 
  60.                 Console.Read(); 
  61.             } 
  62.         } 
  63.     } 
運転結果用の場合:00:01:11.5081320で、1分11秒以上かかりました。
2.コードを修正した後
 

  
  
  
  
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Data; 
  6. using System.Data.Common; 
  7. using System.Data.SQLite; 
  8. using System.Diagnostics; 
  9.  
  10. namespace CApp 
  11.     class Program 
  12.     { 
  13.         static void Main(string[] args) 
  14.         { 
  15.             System.IO.File.Delete("test.db"); 
  16.             SQLiteConnection.CreateFile("test.db"); 
  17.             DbProviderFactory factory = SQLiteFactory.Instance; 
  18.             using (DbConnection conn = factory.CreateConnection()) 
  19.             { 
  20.                 //   
  21.                 conn.ConnectionString = "Data Source=test.db"
  22.                 conn.Open(); 
  23.  
  24.                 //   
  25.                 string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)"
  26.                 DbCommand cmd = conn.CreateCommand(); 
  27.                 cmd.Connection = conn; 
  28.                 cmd.CommandText = sql; 
  29.                 cmd.ExecuteNonQuery(); 
  30.  
  31.                 //   
  32.                 cmd.Parameters.Add(cmd.CreateParameter()); 
  33.  
  34.                 //   
  35.                 Stopwatch watch = new Stopwatch(); 
  36.                 watch.Start(); 
  37.  
  38.                 DbTransaction trans = conn.BeginTransaction(); 
  39.                 try 
  40.                 { 
  41.                     //  1000  
  42.                     for (int i = 0; i < 1000; i++) 
  43.                     { 
  44.                         cmd.CommandText = "insert into [test1] ([s]) values (?)"
  45.                         cmd.Parameters[0].Value = i.ToString(); 
  46.  
  47.                         cmd.ExecuteNonQuery(); 
  48.                     } 
  49.                     trans.Commit(); 
  50.                 } 
  51.                 catch 
  52.                 { 
  53.                     trans.Rollback(); 
  54.                     throw
  55.                 } 
  56.  
  57.                 //   
  58.                 watch.Stop(); 
  59.                 Console.WriteLine(watch.Elapsed); 
  60.                 Console.Read(); 
  61.             } 
  62.         } 
  63.     } 
本人のマシンの運行結果は00:00:00.0724826つまり0.07秒です。
マシンの設定:
Intelクール叡2双核E 8400 
2 Gメモリ
 
なぜ単純に一つの事務を使うだけでこんなに大きな差がありますか?とても簡単で、SQLiteが不足しています。各操作のために一つの業務を開始します。1000回以上のコードを挿入して最低1000個の業務を始めました。実は、これはデータベースの操作の基本的な常識です。皆さん、覚えてください。悪いコードの効率が悪いのは少しもないです。
 
原作者に感謝します。