Как исправить медленную производительность с epplus? - PullRequest
0 голосов
/ 29 января 2019

Я загружаю в файл Excel для массового обновления данных в основных данных.У меня 4 листа.Экспорт, округа, организации, настройки.Виден только экспорт.Все остальное скрыто.

Загрузка файла была очень медленной.Занимает 2-3 минуты.

Я уже нашел проблему.Когда я показываю каждый лист и загружаю файл, тогда вообще не возникает проблем с производительностью.Мы не хотим показывать листы, чтобы не путать наших клиентов.Я сделал небольшое консольное приложение для проверки этого поведения.

private static void Main(string[] args)
        {
            using (var package = new ExcelPackage(new FileInfo(@"")))
            {
                var wb = package.Workbook;
                var wsheets = wb.Worksheets;
                var settings = wsheets["Settings"];
            }

            Console.ReadKey();
        }

wb - это быстро wsheets очень медленно, когда мои листы скрыты, очень быстро, когда нет.получить настройки, загруженные одним файлом, быстро.

Что мне делать, кроме того, чтобы скрыть мои листы?

Обновление

Мы отладили проблему дальше, скрытые / скрытые столбцыбыл ложным срабатыванием.Когда мы прекращаем отладку и запускаем ее снова, отладчик все равно каким-то образом может получить старый результат из-за огромного времени ожидания.

Теперь я нашел настоящего преступника.Когда мы экспортируем файл с помощью EPPLUS, конечный пользователь должен редактировать данные, загружать их обратно в пользовательский интерфейс для проверки.Когда пользователь загружает тот же файл, что и тот, который экспортируется без редактирования файла, происходит эта длинная операция.

Это довольно странное поведение, но, поскольку все должны редактировать файл и сохранять его, ябольше не будет тратить время на попытки решить эту проблему.

1 Ответ

0 голосов
/ 29 января 2019

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

worksheet.Hidden = OfficeOpenXml.eWorkSheetHidden.Hidden;

или

worksheet.Hidden = OfficeOpenXml.eWorkSheetHidden.VeryHidden;

Вы также можете отобразить их с помощью кода, используя

worksheet.Hidden = OfficeOpenXml.eWorkSheetHidden.Visible;
...