Das Abfragen großer Datenmengen mit EF Core 8 dauert länger, wohingegen gespeicherte Prozeduren oder SELECT-Anweisungen C#

Ein Treffpunkt für C#-Programmierer
Guest
 Das Abfragen großer Datenmengen mit EF Core 8 dauert länger, wohingegen gespeicherte Prozeduren oder SELECT-Anweisungen

Post by Guest »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post