Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена при чтении файла CSV с использованием C # - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь найти данные в большом 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 поврежден или нет.

Если у кого-нибудь есть идеи, которые будут полезны. Заранее спасибо.

1 Ответ

0 голосов
/ 03 октября 2019

Я рекомендую вам взглянуть на библиотеку CsvHelper . По словам автора,

Чтение записей даст результаты, поэтому в памяти одновременно может находиться только одна запись.

Это может избежать проблем с памятью.

...