Чтение данных из Excel вызывает утечку памяти
Мой код (успешно) читается на нескольких листах, делает несколько списков и помещает их в словарь для использования других потоков. Функция createLists()
каждую минуту проверяет наличие новых данных в createLists()
Excel и обновляет списки.
Если я запускаю свой код без этой функции, я не вижу утечки памяти. Но если я включу эту функцию, я могу легко увидеть, как память съедается каждый раз, когда она петляет (каждую минуту).
Вот моя функция:
- Добавление нескольких диаграмм в рабочий лист EPPlus, изо всех сил пытаясь правильно подобрать макет
- Получите Excel Range, включая все объекты формы
- Как скопировать DataTable в файл Excel с помощью OLEDB?
- C # / WPF: рендеринг HTML из строки в элемент управления WPF
- Слияние различных рабочих листов книги
public static void createLists() { list_dictionary.Add(1, example_list1); list_dictionary.Add(2, example_list2); list_dictionary.Add(3, example_list3); list_dictionary.Add(4, example_list4); list_dictionary.Add(5, example_list5); list_dictionary.Add(6, example_list6); while (true) { try { Console.WriteLine("In create"); excel = new Excel.Application(); excel_workbook = excel.Workbooks.Open(@"C:\Local Code\Excel\Book1.xlsx"); for (int s = 1; s <= 6; s++) { Excel._Worksheet excel_worksheet = excel_workbook.Sheets[s]; Excel.Range excel_range = excel_worksheet.UsedRange; list_dictionary[s].Clear(); int row_count = excel_range.Rows.Count; int col_count = excel_range.Columns.Count; for (int x = 1; x <= row_count; x++) { for (int y = 1; y <= col_count; y++) { if (excel_range.Cells[x, y] != null && excel_range.Cells[x, y].Value2 != null) { list_dictionary[s].Add(excel_range.Cells[x, y].Value2.ToString()); } } } GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.ReleaseComObject(excel_range); Marshal.ReleaseComObject(excel_worksheet); } } catch (Exception e) { Console.WriteLine("MANTIS"); Console.WriteLine(e); Console.WriteLine(e.StackTrace); } finally { Console.WriteLine("CLEAN UP"); GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.ReleaseComObject(excel_workbook); Marshal.ReleaseComObject(excel); } Console.WriteLine("Out create"); Thread.Sleep(10000); } } }
В list_dictionary
есть 6 «листов», потому что у меня есть цикл for, чтобы перебирать их и обновлять соответствующий список в list_dictionary
. I Excel.Range
и Excel._Worksheet
каждый цикл, затем весь Excel.Application
и Excel.Application
в конце цикла while.
Любая идея, где я не могу освободить память?
- Время включается при импорте ячеек даты из Excel в ASP SQL DB
- Запросить таблицу Excel с помощью C # .NET без использования Jet OLE DB
- Экспорт XElement в Excel
- Преобразование / чтение старой схемы XML XML-файла в читаемый файл .XLSX в ASP MVC
- Чтение значения Datetime из листа Excel
- Что делает sheet = sheetList.FirstOrDefault (ws => ws.Name == string.Format (name, i)); имею в виду?
- Импорт больших данных из Excel в DataGridView и сохранение в базу данных
- Как я могу проанализировать формулу excel?