Wie kann ich die Leistung verbessern und die Geschwindigkeit der Verarbeitungsdaten erhöhen, damit es kurze Zeit benötig
Posted: 05 Feb 2025, 11:58
ein Daten, aber die einzige Herausforderung, mit der ich stehe, ist, dass es sehr langsam ist, dass das Abrufen und Einfügen aller Daten ungefähr 10 Minuten dauert. Wie kann ich meinen Code unten ändern, damit ich die Leistung verbessern und die Geschwindigkeit erhöhen kann, um die Zeit zu minimieren, die zum Verarbeiten und Einfügen aller Daten erforderlich ist. < /p>
Alle Vorschläge werden sehr geschätzt.
Code: Select all
using (var context = new ApplicationDbContext())
{
var dispenseToDelete = context.tblDispense.Where(p => p.HfrCode == facilityName);
if (dispenseToDelete.Any())
{
context.tblDispense.RemoveRange(dispenseToDelete);
context.SaveChanges();
}
}
using (StreamReader sr = new StreamReader(filePath))
using (JsonTextReader reader = new JsonTextReader(sr))
{
while (reader.Read())
{
if (reader.TokenType == JsonToken.StartArray && reader.Path == "tblDispense")
{
using (var context = new ApplicationDbContext())
{
List tblDispenseBatch = new List();
int batchSize = 1000;
while (reader.Read() && reader.TokenType != JsonToken.EndArray)
{
if (reader.TokenType == JsonToken.StartObject)
{
JObject item = JObject.Load(reader);
TblDispense tblDispense = item.ToObject();
tblDispense.UUID = Guid.NewGuid().ToString() + "." + facilityName;
tblDispense.MSDCode = tblDispense.MSDCode + '.' + facilityName;
tblDispense.DispenseID = tblDispense.DispenseID + "." + facilityName;
tblDispense.DispenseRecordId = tblDispense.DispenseRecordId + '.' + facilityName;
tblDispense.HfrCode = facilityName;
tblDispenseBatch.Add(tblDispense);
// Batch insert to avoid memory overload
if (tblDispenseBatch.Count >= batchSize)
{
try
{
context.tblDispense.AddRange(tblDispenseBatch);
context.SaveChanges();
tblDispenseBatch.Clear();
}
catch (DbUpdateException ex)
{
Console.WriteLine($"[{facilityName}] an error occurred while saving the batch: {ex.InnerException?.Message}");
logger.LogError($"[{facilityName}] an error occurred while saving the batch: {ex.InnerException?.Message}");
}
}
}
}
// Insert remaining items in the batch
if (tblDispenseBatch.Count > 0)
{
try
{
context.tblDispense.AddRange(tblDispenseBatch);
context.SaveChanges();
tblDispenseBatch.Clear();
}
catch (DbUpdateException ex)
{
Console.WriteLine($"[{facilityName}] an error occurred while saving the batch: {ex.InnerException?.Message}");
logger.LogError($"[{facilityName}] an error occurred while saving the batch: {ex.InnerException?.Message}");
}
}
}
break;
}
}
}