Passer
Erfahrenes Mitglied
Hallo,
ich habe grade einen kleinen Lasttest auf eine SQLite DB mittels eines C# Programms und über das Tool SQLLiteSpy gemacht.
Vorgehen:
1) Ich lasse das C# Programm laufen, es werden laufend Daten in die DB geschrieben.
2) Ich führe recht häufig (durch Drücken von F9) folgende Anweisungen über den SQLiteSpy auf die DB aus:
Das C# Programm macht folgendes:
Dass dabei "irgendwas" passiert habe ich erwartet. Im Spy bekomme ich ab und an eine Meldung, dass die DB locked ist. Dafür habe ich ja auch Verständnis, da wahrscheinlich grad von dem anderen Programm eingetragen wird.
Allerdings bekomme ich seitens des C# Programms folgende Meldung:
Leider finde ich keinen Grund für diese Meldung. Ist sie einfach falsch oder gibt es eine Möglichkeit bei Sekundärbelastung der DB durch eine andere Anwendung die SQL-Anweisung in eine Art Queue zu schieben?
MfG
Christoph
ich habe grade einen kleinen Lasttest auf eine SQLite DB mittels eines C# Programms und über das Tool SQLLiteSpy gemacht.
Vorgehen:
1) Ich lasse das C# Programm laufen, es werden laufend Daten in die DB geschrieben.
2) Ich führe recht häufig (durch Drücken von F9) folgende Anweisungen über den SQLiteSpy auf die DB aus:
Code:
INSERT INTO LogFiles(LogFileName) VALUES('hello1');
INSERT INTO LogFiles(LogFileName) VALUES('hello2');
INSERT INTO LogFiles(LogFileName) VALUES('hello3');
Das C# Programm macht folgendes:
Code:
SQLiteDataBaseWrapper sqlLiteClient;
sqlLiteClient = new SQLiteDataBaseWrapper();
sqlLiteClient.OpenDatabase(s_DatabaseFileName);
sqlLiteClient.ExecuteNonQuery("PRAGMA locking_mode = NORMAL\n");
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(500);
sqlLiteClient.ExecuteNonQuery(
"INSERT INTO LogFiles(LogFileName) VALUES('test"+i+"');\n");
Console.WriteLine("Loop "+i);
}
sqlLiteClient.CloseDatabase();
Dass dabei "irgendwas" passiert habe ich erwartet. Im Spy bekomme ich ab und an eine Meldung, dass die DB locked ist. Dafür habe ich ja auch Verständnis, da wahrscheinlich grad von dem anderen Programm eingetragen wird.
Allerdings bekomme ich seitens des C# Programms folgende Meldung:
Die Meldung ergibt sich ausUnbehandelte Ausnahme: System.Exception: Error with executing non-query:
"INSERT INTO LogFiles(LogFileName) VALUES('test22');
"!
out of memory
Code:
sqlite3_exec(this.database, queryPointer, IntPtr.Zero, IntPtr.Zero, out error);
...
throw new Exception("Error with executing non-query:\n \"" + query + "\"!\n" +
PointerUtil.PointerToString(sqlite3_errmsg(error)) );
Leider finde ich keinen Grund für diese Meldung. Ist sie einfach falsch oder gibt es eine Möglichkeit bei Sekundärbelastung der DB durch eine andere Anwendung die SQL-Anweisung in eine Art Queue zu schieben?
MfG
Christoph