Я пытаюсь найти данные в большом CSV-файле (8 МБ), размер которого составляет 18033 строки, что является обязательным требованием для настольных приложений с использованием Windows Forms (C #), которые использовались в .Net версии 4 и 4.6.1.
код используемой функции следующий:
private List<string> SearchData(string searchText)
{
try
{
List<string> dates = new List<string>();
using (var csv = new FileStream(Config.DataPath, FileMode.Open, FileAccess.Read, FileShare.Read))
using (BufferedStream bs = new BufferedStream(csv))
using (StreamReader sr = new StreamReader(bs))
{
var lines = string.Empty;
while ((lines = sr.ReadLine()) != null)
{
if (lines.ToLower().Contains(searchText.ToLower()))
{
dates.Add(lines.Substring(0, 10));
}
}
}
return dates;
}
catch (Exception ex)
{
MessageBox.Show("Unable to search the file");
ex.Data.Add("SearchText", searchText);
Logger.Log(ex, "SearchData");
}
return null;
}
Но я получаю следующее исключение
System.AccessViolationException: попыткачитать или писать защищенную память. Это часто указывает на то, что другая память повреждена.
Получите то же исключение, пока я использую метод File.ReadAllLines. Пробовал один и тот же код в VS2017 и VS 2019 на двух разных ПК.
Странно, если ошибка поместить в цикл while счетчик, он пересекает до 500-600 строк, в противном случае он пересекает весь файл и выдает мне исключение в конце процесса. Также не срабатывает, даже если я установил AccessViolationException. Код прекрасно работает в Linqpad, поэтому я не уверен, что файл CSV поврежден или нет.
Если у кого-нибудь есть идеи, которые будут полезны. Заранее спасибо.