Re: Одновременное открытие Excel-документов в веб-приложении
От: Greeter  
Дата: 23.01.07 18:12
Оценка:
Здравствуйте, minyurov, Вы писали:


M>При одновременном октрытии 1 или 2 экземпляров, все работает. При 3 экземплярах работает нестабильно, далее возникают стабильные ошибки типа "Не найден файл" (хотя файл создан и находится во временном каталоге) или "Нельзя одновременно открыть несколько форм".


Общие рекомендации
— Св-ва Interactive и DisplayAlerts установить в False
— Не "бросать" ссылки на объекты, возвращаемые екселем!

Неправильно:
app.Workbooks[1].Worksheets[1].Range["A1"].Value = "aaa";


Правильно:
Workbooks books = null;
Workbook book = null;
try
{
  books = app.Workbooks;
  book = books[1];

}
finally
{

  if (book != null) Marshal.ReleaseComObject(book);
  if (books != null) Marshal.ReleaseComObject(books);
  // Опционально вызвать GC.Collect();
}


— Явно закрывать приложение примерно так:
finally
{
  app.Quit();
  Marshal.ReleaseComObject(app);
  GC.WaitForPendingFinalizers();
  GC.Collect();
}


— Максимально в коде использовать примитивы синхронизации для гарантии того, чтобы exe-север не дергали за вымя несколько потоков.


— Вообще по возможности отказаться от екселя и использовать Reporting Service или какой-нибудь класс, умеющий работать с Biff (например, Component One C1Excel)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.