Ich habe ein wenig Code, der eine HTML-Seite aus einer lokalen SQLite-Datenbank-Datei in .NET Core 2.0 zieht.
Dieser Code funktioniert im Debug-Modus einwandfrei, läuft aber nach der Veröffentlichung der App extrem langsam.
Ich habe eine Stoppuhr verwendet, um zu diagnostizieren, welcher Teil des Codes das Problem verursacht und diese connection.QueryFirstOrDefault
hat. QueryFirstOrDefault benötigt 2 ms, um eine einzelne Zeile im Debug-Modus zu finden, allerdings dauert die gleiche Aufgabe 1,4 Sekunden nachdem ich die App veröffentlicht habe. Das ist etwa 700 mal langsamer.
//initialize connection
var connection = new SqliteConnection("Data Source=" + dbName);
// Build SQL String
string query = @"SELECT *
FROM HtmlItems
WHERE PostID = 1;
// Start Timer
var watch = System.Diagnostics.Stopwatch.StartNew();
Submit query
HtmlItem = connection.QueryFirstOrDefault<HtmlItem>(query);
// End Timer
watch.Stop();
var result = watch.ElapsedMilliseconds();
Die Abfrage wird einem Objekt zugeordnet, das folgendermaßen aussieht
public class HtmlItem
{
public int PostID { get; set; }
public string PostTitle { get; set; }
public string PostDescription { get; set; }
public int PostDate { get; set; } // Unix Timestamp
public int Hidden { get; set; }
public string Url { get; set; }
public string PostHTML { get; set; }
}
Dieselbe Datenbankdatei wird beim Debuggen und Produzieren verwendet, diese Datenbankdatei hat nur drei Zeilen. Meine App sollte die einzige Sache sein, die versucht, auf die Datei zuzugreifen.
Das Indizieren der SQLite-Datenbankdatei scheint keine Geschwindigkeitsverbesserung zu bewirken.
Ich frage mich, wie ich feststellen kann, warum meine Verbindung zur Datenbank in der Produktion um das 700-fache langsamer ist.
SQLite scheint nicht sehr schnell mit Dapper auf .net Kern beim synchronen Lesen der Datei.
Wenn Sie die Datei asynchron lesen, dann scheint es viel schneller zu sein.
HtmlItem = await connection.QueryFirstOrDefault<HtmlItem>(query);