· 9 years ago · Nov 11, 2016, 06:44 AM
1using System;
2using System.Data.SQLite;
3using System.IO;
4using System.Linq;
5using System.Threading;
6using System.Threading.Tasks;
7
8namespace ConsoleApplication1
9{
10 internal class Program
11 {
12 /// <summary>
13 /// The main entry point for the application.
14 /// </summary>
15 [STAThread]
16 private static void Main()
17 {
18 File.Delete("test.db3");
19 //Thread.Sleep(20000);
20 var cs = "data source=test.db3;";
21 var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) { JournalMode = SQLiteJournalModeEnum.Wal };
22 cs = sqLiteConnectionStringBuilder.ToString();
23 var path = Environment.Is64BitProcess ? "x64" : "x86";
24 var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
25 using (var connection = new SQLiteConnection(cs))
26 {
27 connection.Open();
28 connection.EnableExtensions(true);
29 connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
30 var extPath = Path.Combine(path, "stemmer5.dll");
31 connection.LoadExtension(extPath);
32 extPath = Path.Combine(path, "libnu.dll");
33 connection.LoadExtension(extPath, "sqlite3_nunicode_init");
34 connection.EnableExtensions(false);
35 using (var command = connection.CreateCommand())
36 {
37 command.CommandText = "CREATE VIRTUAL TABLE IF NOT EXISTS test USING FTS5(a,b,tokenize='snowball russian english', prefix = '1 2 3 4 5 6 7')";
38 command.ExecuteScalar();
39 }
40 }
41 Console.WriteLine("start");
42 try
43 {
44 var test1 = Test1();
45 var test = Test();
46 Task.WaitAll(test, test1);
47 Console.WriteLine("end");
48 Console.ReadKey();
49 }
50 catch(Exception)
51 {
52 throw;
53 }
54 }
55
56 private static async Task Test()
57 {
58 try
59 {
60 foreach (var VARIABLE in Enumerable.Range(0, 20))
61 {
62 var cs = "data source=test.db3;";
63 var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) {JournalMode = SQLiteJournalModeEnum.Wal};
64 cs = sqLiteConnectionStringBuilder.ToString();
65 var path = Environment.Is64BitProcess ? "x64" : "x86";
66 var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
67
68 using (var connection = new SQLiteConnection(cs))
69 {
70 await connection.OpenAsync().ConfigureAwait(false);
71 connection.EnableExtensions(true);
72 connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
73 var extPath = Path.Combine(path, "stemmer5.dll");
74 connection.LoadExtension(extPath);
75 extPath = Path.Combine(path, "libnu.dll");
76 connection.LoadExtension(extPath, "sqlite3_nunicode_init");
77 connection.EnableExtensions(false);
78 using (var command = connection.CreateCommand())
79 {
80 command.CommandText = "INSERT INTO TEST VALUES(@a, @b)";
81 var parameter = command.CreateParameter();
82 parameter.ParameterName = "@a";
83 var parameter1 = command.CreateParameter();
84 parameter1.ParameterName = "@b";
85 command.Parameters.AddRange(new[] {parameter, parameter1});
86 using (var transaction = connection.BeginTransaction())
87 {
88 foreach (var i in Enumerable.Range(0, 10000))
89 {
90 parameter.Value = i;
91 parameter1.Value = i + i;
92 await command.ExecuteScalarAsync().ConfigureAwait(false);
93 }
94 transaction.Commit();
95 }
96 }
97 }
98 }
99 }
100 catch(Exception ex)
101 {
102 Console.WriteLine(ex);
103 }
104 }
105
106 private static async Task Test1()
107 {
108 try
109 {
110 await Task.Delay(1000).ConfigureAwait(false);
111 var cs = "data source=test.db3;";
112 var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) {JournalMode = SQLiteJournalModeEnum.Wal};
113 cs = sqLiteConnectionStringBuilder.ToString();
114 var path = Environment.Is64BitProcess ? "x64" : "x86";
115 var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
116 foreach (var i in Enumerable.Range(0, 600))
117 {
118 using (var connection = new SQLiteConnection(cs))
119 {
120 await connection.OpenAsync().ConfigureAwait(false);
121 connection.EnableExtensions(true);
122 connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
123 var extPath = Path.Combine(path, "stemmer5.dll");
124 connection.LoadExtension(extPath);
125 extPath = Path.Combine(path, "libnu.dll");
126 connection.LoadExtension(extPath, "sqlite3_nunicode_init");
127 connection.EnableExtensions(false);
128 using (var command = connection.CreateCommand())
129 {
130 command.CommandText = "SELECT * FROM test";
131 using (var dataReader = await command.ExecuteReaderAsync().ConfigureAwait(false))
132 {
133 while(await dataReader.ReadAsync().ConfigureAwait(false))
134 {
135 var l = await dataReader.GetFieldValueAsync<long>(0).ConfigureAwait(false);
136 var l1 = await dataReader.GetFieldValueAsync<long>(0).ConfigureAwait(false);
137 }
138 }
139 }
140 }
141 }
142 }
143 catch(Exception ex)
144 {
145 Console.WriteLine(ex);
146 }
147 }
148 }
149}