Ich muss einige Daten auf Basis eines Schlüsselwortes abrufen, die Abfrage wird zu 100% genau getestet, aber das Problem ist, dass das Laden der reader
ist ziemlich langsam. Ich habe versucht, diese Abfrage durch eine zu ersetzen, die inner join
s überhaupt nicht enthält, und das Laden war ziemlich schnell. Ich frage mich also, warum DataTable.Load() so viel Zeit braucht, weil ich nur eine Spalte auswähle. Ist es die SQLite
's ExecuteReader
, die die ganzen Ergebnisse und nicht nur die eine Spalte lädt?DataTable Reader Laden ist sehr langsam
Vor der Verwendung der DataTable betrug die durchschnittliche Ausführungszeit für jede reader.Read()
7 Sekunden.
Dies ist mein Code:
_database.Connect();
var selectCommand = new SQLiteCommand(
@"SELECT A.ID AS MY_ID FROM MD
INNER JOIN TMD ON MD.ID = TMD.ID_MD
INNER JOIN TR ON TR.ID = TMD.ID_TR
INNER JOIN P ON P.ID = TR.ID_P
INNER JOIN DP ON DP.ID_P = P.ID
INNER JOIN CD ON CD.ID = DP.ID_CD
WHERE CD.DESC = @desc"
);
selectCommand.Parameters.AddWithValue("@desc", value);
using (DbDataReader reader = _database.ExecuteQuery(selectCommand))
{
DataTable data = new DataTable("MyData");
data.Load(reader);
}
_database.Disconnect();
Es klingt wie Ihre Abfrage ist einfach langsam. Gibt es eine andere Möglichkeit, auf Ihre Tabellen zuzugreifen, sodass Sie nicht so viele Joins durchführen müssen? – Tejs
Ich wusste, das würde weh tun .. Leider müssen wir die 2 Tabellen auf einem der Felder verbinden. Diese Verknüpfungen stellen die einzige Verbindung zwischen ihnen dar, wenn das aktuelle DB-Schema angegeben wird. – iCantSeeSharp
Was ist '_database' und warum hat es Methoden wie' Connect' und 'Disconnect'? Erfinde das Rad nicht neu. Sie sollten auch eine 'using-Anweisung' für Ihre Verbindung verwenden, um sicherzustellen, dass sie so schnell wie möglich" geschlossen "wird. Ist dies eine Multithreading-Umgebung wie ASP.NET? –