Ваш код является звуком.Если у вас возникают проблемы с «утечкой» экземпляров Excel, зависших после запуска кода, есть два возможных решения.
Решение для одного экземпляра
Сделать xlApp
уровнем формысобственность, которой вы владеете на протяжении всего срока действия вашей формы.Затем повторно используйте this.xlApp
через вызовы вашего кода.Тогда будет только один экземпляр Excel в течение всей жизни вашей формы.
Вам может потребоваться использовать флаги, блокировку или объединение в пул, чтобы сделать этот поток безопасным (если ваш код должен быть потокобезопасным).
Решение с несколькими экземплярами
Может возникнуть проблема двух потоков, конкурирующих за использование Book2.xlsx
в качестве одного и того же рабочего файла и вызывающих конфликты.В этом случае вместо Book2.xlsx
создайте уникальное временное имя файла (см. Здесь) .
Чтобы избавиться от случайных экземпляров Excel, , как описано здесь вам нужно будет запустить сборщик мусора (GC.Collect(); GC.WaitForPendingFinalizers();
), когда ваш код вернется к вызывающей стороне.
Решение с несколькими экземплярами, вероятно, будет медленнее, чем решение с одним экземпляром, посколькупреимущество памяти, заключающееся в отсутствии случайных экземпляров Excel, будет сведено на нет из-за затрат на создание и разбор экземпляра Excel.Application
(по крайней мере, с точки зрения процессора и дискового ввода-вывода).