@ -1,10 +1,15 @@
using System ;
using PSqLiteWrapper ;
using System ;
using System.Collections.Generic ;
using System.Collections.Generic ;
using System.Data ;
using System.Data ;
using System.Data.SQLite ;
using System.Data.SQLite ;
using System.Diagnostics ;
using System.Diagnostics ;
using System.IO ;
using System.Linq ;
using System.Linq ;
using System.Reflection ;
using System.Text ;
using System.Text ;
using System.Text.RegularExpressions ;
using System.Threading ;
using System.Threading.Tasks ;
using System.Threading.Tasks ;
namespace SQLite_Console
namespace SQLite_Console
@ -13,60 +18,106 @@ namespace SQLite_Console
{
{
static void Main ( string [ ] args )
static void Main ( string [ ] args )
{
{
string connString = @"Data Source = D:\SQLite\mydb.db" ;
string dbFileName = "mydb.db" ;
using ( SQLiteConnection conn = new SQLiteConnection ( connString ) )
string path = Assembly . GetExecutingAssembly ( ) . CodeBase ;
string dir = Path . GetDirectoryName ( path ) . Replace ( @"file:\" , "" ) ;
Stopwatch watch = new Stopwatch ( ) ;
watch . Start ( ) ;
PSqLite . DBPath = $@"{dir}\{dbFileName}" ;
PSqLite . CreateDB ( ) ;
watch . Stop ( ) ;
Console . WriteLine ( $"database check: {watch.ElapsedMilliseconds}ms" ) ;
Console . WriteLine ( ) ;
watch . Restart ( ) ;
// Create table
PSqLite . ExecuteQuery (
@ "CREATE TABLE 'member' (
' name ' TEXT ,
' age ' INTEGER ,
' guid ' TEXT
) ; ");
watch . Stop ( ) ;
Console . WriteLine ( $"create table: {watch.ElapsedMilliseconds}ms" ) ;
Console . WriteLine ( ) ;
watch . Restart ( ) ;
List < Thread > threads = new List < Thread > ( ) ;
for ( int i = 0 ; i < 2 0 ; i + + )
{
{
Stopwatch watch = new Stopwatch ( ) ;
threads . Add ( new Thread ( ( ) = > InsertRandomRows ( $"t{i + 1}" , 1 0 0 0 ) ) ) ;
watch . Start ( ) ;
}
conn . Open ( ) ;
foreach ( Thread thread in threads )
{
thread . Start ( ) ;
}
watch . Stop ( ) ;
//Random rnd = new Random();
Console . WriteLine ( $"open: {watch.ElapsedMilliseconds}ms" ) ;
//for (int i = 0; i < 2000; i++)
Console . WriteLine ( ) ;
//{
watch . Restart ( ) ;
// string guid = Guid.NewGuid().ToString();
// int age = rnd.Next(1, 100);
// string name = $"Robo#{i + 1}";
// string insertQry = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')";
// PSqLite.ExecuteQuery(insertQry);
//}
Random rnd = new Random ( ) ;
//watch.Stop();
for ( int i = 0 ; i < 2 0 0 0 ; i + + )
//Console.WriteLine($"insert 2000 row case1: {watch.ElapsedMilliseconds}ms");
{
//Console.WriteLine();
string guid = Guid . NewGuid ( ) . ToString ( ) ;
//watch.Restart();
int age = rnd . Next ( 1 , 1 0 0 ) ;
string name = $"Robot#{i + 1}" ;
string insertQry = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')" ;
SQLiteCommand cmd = new SQLiteCommand ( insertQry , conn ) ;
cmd . ExecuteNonQuery ( ) ;
}
watch . Stop ( ) ;
//rnd = new Random();
Console . WriteLine ( $"insert: {watch.ElapsedMilliseconds}ms" ) ;
//using (SQLiteConnection conn = PSqLite.Connection)
Console . WriteLine ( ) ;
//{
watch . Restart ( ) ;
// conn.Open();
// for (int i = 0; i < 2000; i++)
// {
// string guid = Guid.NewGuid().ToString();
// int age = rnd.Next(1, 100);
// string name = $"Robo#{i + 1}";
// string insertQry = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')";
// PSqLite.ExecuteQuery(conn, insertQry);
// }
DataSet ds = new DataSet ( ) ;
// conn.Close();
string selectQry = "SELECT * FROM member" ;
//}
SQLiteDataAdapter adt = new SQLiteDataAdapter ( selectQry , conn ) ;
adt . Fill ( ds ) ;
DataRowCollection rows = ds . Tables [ 0 ] . Rows ;
//watch.Stop();
PrintRows ( rows ) ;
//Console.WriteLine($"insert 2000 row case2: {watch.ElapsedMilliseconds}ms");
//Console.WriteLine();
//watch.Restart();
watch . Stop ( ) ;
//DataSet select = PSqLite.ExecuteSelectQuery("SELECT * FROM member");
Console . WriteLine ( $"select all: {watch.ElapsedMilliseconds}ms" ) ;
//DataRowCollection rows = select.Tables[0].Rows;
Console . WriteLine ( ) ;
////PrintRows(rows);
watch . Restart ( ) ;
selectQry = "SELECT * FROM member WHERE age < 50" ;
//watch.Stop();
adt = new SQLiteDataAdapter ( selectQry , conn ) ;
//Console.WriteLine($"select all: {watch.ElapsedMilliseconds}ms");
adt . Fill ( ds ) ;
//Console.WriteLine();
//watch.Restart();
rows = ds . Tables [ 0 ] . Rows ;
//PSqLite.ExecuteQuery("UPDATE member SET name = 'minor' WHERE age <= 20");
PrintRows ( rows ) ;
watch . Stop ( ) ;
//watch.Stop();
Console . WriteLine ( $"select under 50: {watch.ElapsedMilliseconds}ms" ) ;
//Console.WriteLine($"update under 20: {watch.ElapsedMilliseconds}ms");
Console . WriteLine ( ) ;
//Console.WriteLine();
watch . Restart ( ) ;
}
//select = PSqLite.ExecuteSelectQuery("SELECT * FROM member WHERE age <= 20");
//rows = select.Tables[0].Rows;
//watch.Stop();
//Console.WriteLine($"select under 20: {watch.ElapsedMilliseconds}ms");
//Console.WriteLine();
//watch.Restart();
//PrintRows(rows);
Console . ReadKey ( ) ;
Console . ReadKey ( ) ;
}
}
@ -83,5 +134,33 @@ namespace SQLite_Console
Console . WriteLine ( $"name: {name}, age: {age}, guid: {guid}" ) ;
Console . WriteLine ( $"name: {name}, age: {age}, guid: {guid}" ) ;
}
}
}
}
private static void InsertRandomRows ( string identifier , int count )
{
Console . WriteLine ( identifier ) ;
Stopwatch watch = new Stopwatch ( ) ;
watch . Start ( ) ;
Random rnd = new Random ( ) ;
using ( SQLiteConnection conn = PSqLite . Connection )
{
conn . Open ( ) ;
for ( int i = 0 ; i < count ; i + + )
{
string guid = Guid . NewGuid ( ) . ToString ( ) ;
int age = rnd . Next ( 1 , 1 0 0 ) ;
string name = $"{identifier} Robo#{i + 1}" ;
string insertQry = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')" ;
PSqLite . ExecuteQuery ( conn , insertQry ) ;
}
conn . Close ( ) ;
}
watch . Stop ( ) ;
Console . WriteLine ( $"insert 2000 row for {identifier}: {watch.ElapsedMilliseconds}ms" ) ;
Console . WriteLine ( ) ;
}
}
}
}
}