Редактировать: Спасибо @Progressive за помощь, я спешил написать и на этот раз нуждался в проверке орфографии;)
Я удалил соединение с БД, и это была проблема с производительностью. Я посмотрю на код и посмотрю, смогу ли я что-нибудь сделать для ускорения этой части кода. Спасибо всем за идеи!
Я пытаюсь прочитать около 50-100 CSV-файлов с 5000-20000 строками. Это занимает много времени, мой вопрос: возможно ли выполнить мой код быстрее, возможно, с помощью streamread или любым другим методом?
Текст в файле построен так
123456789; РОБЕРТ; 1; 2019-04-26; 01; 10; ЧАС; Париж
Если первый сегмент - это идентификатор, второе имя, третья группа, четвертая дата, пятый час, шестое значение, а седьмое - это «час», чтобы определить, в каком формате это, восемь городов. Каждая строка представляет собой еще один час.
Фон в том, что я читаю файлы и вставляю их в SQL. Кстати, соединение SQL уже установлено.
Я пытался использовать File.ReadAllLines, но это было медленнее.
Я переместил сохранения в DB во внешний цикл foreach, чтобы получить некоторую производительность. Это сделал немного. Тем не менее, чтение файла CSV из 10000 строк (600 КБ) занимает около 20 минут.
Я также пытался создать класс с параметрами, которые я устанавливаю, не увеличивая производительность.
var filePaths = Directory.GetFiles(@"C:\temp\", "**.csv");
foreach (string s in filePaths)
{
var lines = File.ReadLines(s).Skip(1);
foreach (var csvLine in lines)
{
if (csvLine.Contains(";;;;;"))
{
break;
}
List<string> values = new List<string>(csvLine.Split(';'));
string id = values[0];
string date = values[3];
var timestart = values[4];
//Convert "01" to 01:00
int result = Convert.ToInt32(timestart);
TimeSpan hourTime = TimeSpan.FromHours(result);
string fromTimeString = result.ToString("HH");
//Set timestart and time end
DateTime resultDate = DateTime.Parse(date);
DateTime timeStart = resultDate.Add(hourTime).AddHours(-2);
DateTime timeEnd = timeStart.AddHours(1);
var year = timeStart.Year;
var month = timeStart.Month;
var day = timeStart.Day;
var hour = timeStart.Hour;
//set id
string dataId = id.ToString();
//set sum
double sumValue = double.Parse(values[4]) * 10;
/
var hourValue = myDB.HourValues.Where(w => w.streamID == dataId && w.TimeStart == timeStart).FirstOrDefault();
if (hourValue == null)
{
hourValue = new HourValues
{
streamID = dataId,
TimeStart = timeStart,
TimeEnd = timeEnd,
YearInt = year,
MonthInt = month,
DayInt = day,
HourInt = hour,
ResultTime = DateTime.Now,
SumValue = (decimal)sumValue,
};
myDB.HourValues.Add(hourValue);
}
else
{
hourValue.OriginalSum = hourValue.OriginalSum ?? hourValue.SumValue;
hourValue.ResultTime = DateTime.Now;
hourValue.SumValue = (decimal)sumValue;
}
}
myDB.SaveChanges();
}
Я бы хотел посмотреть, смогу ли я как-нибудь быстрее прочитать файлы. И я ценю любую помощь, которую я могу получить или узнать о коде.