编辑:谢谢@Progressive的帮助,我急忙写作,一次是需要拼写检查的;) 我删除了数据库连接,这就是性能问题。我将研究代码,看看是否有什么我可以做的来加快那部分代码的速度。谢谢大家的见解!
我正在尝试读取5000-100000行之间的大约50-100个CSV文件。这需要花费很多时间,我的问题是我的代码是否可以用streamread或其他方法更快地执行? 文件中的文本是这样构建的 123456789; ROBERT; 1; 2019-04-26; 01; 10; HOUR; PARIS 其中第一段为id,第二名称,第三组,第四日期,第五小时,第六值和第七为“小时”来确定其格式,即八个城市,每行是另一个小时。
背景是我正在读取文件并将其插入SQL。顺便说一下,SQL连接已经建立。
我尝试使用File.ReadAllLines,但是速度较慢。 我将数据库中的savechanges移到了外部的foreach循环中以获得一些性能。它做了一点。不过,读取10000行的csv文件(600 KB)仍需要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();
}
我想看看我能否以某种方式更快地读取文件。并感谢我能获得的任何帮助或对代码的了解。
答案 0 :(得分:-3)
您始终可以使用多线程在当前计算机上实现该功能。
您可以使用Parallel.For或Parallel.ForEach。这将大大提高速度 您只需要在此示例上小心一点,因为顺序似乎很重要。
由于Parallel的本质,它可以以任何顺序访问数组,因此您需要构建一些考虑到这一点的东西。
我建议的另一件事是使用两种方法。读取文件的文件