Re[5]: Скорость обработки Excel таблицы.
От: v0l0d  
Дата: 16.11.05 01:43
Оценка:
Здравствуйте, _Michail, Вы писали:

_M>Здравствуйте, Chupa_Kabra, Вы писали:


C_K>>
C_K>>(object[,])((Excel.Range)shit.get_Range(excel.Cells[1, 1], excel.Cells[25, 10])).Value2
C_K>>


_M>В этом случае я имею только массив Value2, мне еще нужну знать Text, формат ячейки, бордюры и т.д.

_M>Если я делаю
_M>(object[,])((Excel.Range)shit.get_Range(excel.Cells[1, 1], excel.Cells[25, 10])).Text к примеру, валиться
_M>System.InvalidCastException: Specified cast is not valid.

_M>Что то можно кроме Value2 взять?

Вы не подскажете мне как получить из Value2 дату, а не double?
У меня в ячейке стоит дата, но когда я получаю значение через Value2, то результатом является double (
Огромное спасибо.
Владимир.
Re: Скорость обработки Excel таблицы.
От: Andrbig  
Дата: 16.11.05 08:29
Оценка:
Здравствуйте, _Michail, Вы писали:

_M>Excel.Worksheet shit = (Excel.Worksheet)workbook.Worksheets.get_Item(1);

_M>excel.ScreenUpdating = false;

_M>for(int i = 1; i < 25; i++)

_M>{
_M> for(int j = 1; j < 20; j++)
_M> {
_M> TableCell cell = new TableCell();
_M> Excel.Range myExcelCell = ((Excel.Range)shit.Cells[i,j]);
_M> //Тут еще есть запись в файл, но на скорость она особо не влияет, проверял.
_M> }
_M>}
_M>excel.ScreenUpdating = true;

_M>Marshal.ReleaseComObject(shit);

_M>shit = null;
_M>Marshal.ReleaseComObject(workbook);
_M>workbook = null;
_M>excel.DisplayAlerts = false;
_M>excel.Quit();
_M>Marshal.ReleaseComObject(excel);
_M>excel = null;
_M>GC.Collect();
_M>GC.WaitForPendingFinalizers();
_M>GC.Collect();



За последние три строки руки оторвать надо.
Re[2]: Скорость обработки Excel таблицы.
От: IDecember Россия  
Дата: 16.11.05 08:39
Оценка:
Здравствуйте, Andrbig, Вы писали:

_M>>GC.Collect();

_M>>GC.WaitForPendingFinalizers();
_M>>GC.Collect();


A>За последние три строки руки оторвать надо.


Кстати, а почему? Тоже встречал такой код, но не понял, зачем его используют.
Re[3]: Скорость обработки Excel таблицы.
От: TK Лес кывт.рф
Дата: 16.11.05 09:37
Оценка:
Hello, "IDecember"
>
> Кстати, а почему? Тоже встречал такой код, но не понял, зачем его
> используют.

В некоторых случаях (особенно при работе с ActiveX/COM) проще запустить
явную сборку мусора чем, париться с учетом всех используемых ресурсов.
Например, Windows.Forms в некоторых случаях так делает. в целом, для
клиетского процесса принудительный запуск сборщика мусора это не такая уж и
страшная вещь (если, не увлекаться).

Так же, в некоторых случаях без обращения к сборщику мусора тоже тяжело
обойтись:
PRB: The Garbage Collector Does Not Release a COM Object That Handles
Events as You Expect

PRB: Managed Object Is Not Garbage Collected When the Managed Object
Handles an Event for an Unmanaged (COM) Object

BUG: The XmlValidatingReader Class Does Not Close the Stream When the XML
Document References a DTD That Has Errors


Что касается примера из оригинального топика то, в случае использования
Excel в клиентском приложении
GC.Collect();GC.WaitForPendingFinalizers(); это вполне адекватное
решение (достаточно посмотреть для скольких объектов там не сделан
Marshal.ReleaseComObject и выбрать что будет проще — отслеживать все самому
либо, один раз вызвать сборщик мусора).

Конечно, можно для дополнительной красоты решения вынести сборку мусора в
отдельный класс тогда, сборка мусора будет не так сильно бросаться в глаза.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Скорость обработки Excel таблицы.
От: Аноним  
Дата: 16.11.05 09:31
Оценка:
>Кстати, а почему? Тоже встречал такой код, но не понял, зачем его используют.

Потому что без него excel.exe остается висеть в памяти. А многих это беспокоит. Вот пример:

Excel.Application xl = new Excel.ApplicationClass();
Excel.Workbook wb = xl.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
xl.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xl);
//GC.Collect();

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


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.