Как я могу повысить производительность и увеличить скорость обработки данных, чтобы потребовалось короткое время для чтеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу повысить производительность и увеличить скорость обработки данных, чтобы потребовалось короткое время для чте

Сообщение Anonymous »

У меня есть приложение Core Console Core .NET, которое считывает части файлов JSON, хранящихся в папке, часть JSON, которую я читаю, содержит в нем 500 000 записей, я могу прочитать все Данные, но единственная проблема, с которой я сталкиваюсь, это то, что он очень медленный, для получения и вставки всех данных требуется около 10 минут. Как я могу изменить свой код ниже, чтобы я мог повысить производительность и увеличить скорость, чтобы минимизировать время, необходимое для обработки и вставки всех данных. < /p>

Код: Выделить всё

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;
}
}
}
Любые предложения будут высоко оценены.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ta-so-that
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»