Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- var dbs = new[]
- {
- new { Provider = "System.Data.OleDb", ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\tmp\testdb\access.mdb" },
- new { Provider = "System.Data.SqlServerCe.3.5", ConnectionString = @"Data Source=E:\tmp\testdb\sqlce35.sdf" },
- new { Provider = "System.Data.SqlServerCe.4.0", ConnectionString = @"Data Source=E:\tmp\testdb\sqlce40.sdf" },
- new { Provider = "System.Data.SQLite", ConnectionString = @"Data Source=E:\tmp\testdb\test.db" }
- };
- foreach (var db in dbs)
- {
- var factory = DbProviderFactories.GetFactory(db.Provider);
- using (var connection = factory.CreateConnection())
- {
- connection.ConnectionString = db.ConnectionString;
- connection.Open();
- CreateSchema(connection);
- lastId = 0;
- // First run for JIT warmup
- TestInsert(connection, 1, true);
- Stopwatch sw = Stopwatch.StartNew();
- TestInsert(connection, 100000, true);
- sw.Stop();
- Console.WriteLine ("{0} (with transaction) - {1}", db.Provider, sw.Elapsed);
- sw.Reset();
- sw.Start();
- TestInsert(connection, 100000, false);
- sw.Stop();
- Console.WriteLine ("{0} (no transaction) - {1}", db.Provider, sw.Elapsed);
- }
- }
- }
- void CreateSchema(DbConnection connection)
- {
- try
- {
- using (var dropCommand = connection.CreateCommand())
- {
- dropCommand.CommandText = "DROP TABLE Product";
- dropCommand.ExecuteNonQuery();
- }
- }
- catch { }
- using (var createTableCommand = connection.CreateCommand())
- {
- createTableCommand.CommandText = "CREATE TABLE Product (Id INTEGER NOT NULL PRIMARY KEY, Name NVARCHAR(200) NOT NULL)";
- createTableCommand.ExecuteNonQuery();
- }
- }
- int lastId = 0;
- void TestInsert(DbConnection connection, int count, bool useTransaction)
- {
- DbTransaction transaction = null;
- if (useTransaction)
- transaction = connection.BeginTransaction();
- using (transaction)
- {
- using (var command = connection.CreateCommand())
- {
- command.CommandText = "INSERT INTO Product(Id, Name) VALUES (@id, @name)";
- var idParameter = command.CreateParameter();
- idParameter.ParameterName = "id";
- idParameter.DbType = DbType.Int32;
- command.Parameters.Add(idParameter);
- var nameParameter = command.CreateParameter();
- nameParameter.ParameterName = "name";
- nameParameter.DbType = DbType.String;
- nameParameter.Value = "blabla";
- command.Parameters.Add(nameParameter);
- command.Transaction = transaction;
- for (int i = 0; i < count; i++)
- {
- idParameter.Value = ++lastId;
- command.ExecuteNonQuery();
- }
- }
- if (transaction != null)
- transaction.Commit();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement