Ich migriere die WCF-Anwendung zu Blazor WebAssembly mit EF Core 8. In WCF dauert es 10–12 Sekunden, um Daten (200.000 Datensätze) aus der Ansicht abzurufen.
Meine Tabelle enthält insgesamt ca. 45 Millionen Zeilen, davon sind 200.000 meine gefilterten Zeilen.
Während ich es mit EF Core versuche, dauert es 3 Minuten. Es sollte in kürzerer Zeit abgerufen werden.
Meine Methode ist wie folgt:
public async Task ReportDatAsync(DatbaseContext dbContext. DataDto params, CancellationToken ct)
{
IDictionary searchParams = new Dictionary
{
{ "Year", string.Join(",",params.Year) },
{ "Month", string.Join(",", params.Period) },
{ "Type", string.Join(",", params.Type) }
};
var queryBuilder = new StringBuilder(@"SELECT * FROM table WHERE 1=1");
foreach (var filter in searchParams)
{
if (filter.Value != null && filter.Value.Any())
{
var formattedValues = string.Join(",", filter.Value.Split(',').Select(v => $"'{v.Trim()}'"));
queryBuilder.Append($" AND {filter.Key} IN ({formattedValues})");
}
}
var queryString = queryBuilder.ToString();
var queryText = dbContext.table.FromSqlRaw(queryString).AsNoTracking();
var data1 = await queryText.ToListAsync(ct);
}
Ich möchte die Ergebnismenge nicht an ein Modell binden. Ich habe die gleiche Logik in WCF mit System.Data.Entity und sie ruft die Daten in 10–12 Sekunden ab.
Meine Anwendung unterstützt kein Multithreading, um mehrere zu haben Abfragen auf einmal.
Das Abfragen großer Datenmengen mit EF Core 8 dauert länger, wohingegen gespeicherte Prozeduren oder SELECT-Anweisungen ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post