|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
PB 6.5.1 Есть скрипт, который конвертирует некоторое количество html - файлов в Excel. Выглядит примерно так lole_excel = create oleobject lole workbook = create oleobject IF lole_excel.ConnectToNewObject("excel.application") <> 0 THEN destroy lole_excel RETURN -1 END IF Здесь начинается цикл, в котором перебираются названия файлов lole_workbook = lole_excel.application.workbooks.open(ls_path + '.htm') lole_workbook.SaveAs(ls_path+'.xls',-4143) lole_workbook.close() Здесь цикл заканчивается lole_excel.application.quit lole_excel.DisconnectObject() destroy lole_workbook destroy lole_excel Работать-то это работает, но с каждым новым файлом отъедает кусок памяти, и в конце концов приложение вылетает с сообщением Out of memory. Как решить проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 12:43 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
2 conrad: Сталкивались с подобной проблемой, только с вордом, а не с экселем. По опыту могу прекомендовать следующее (примерно применительно к вашей стиуации): 1. оле-объект создаем в цикле для каждого нового файла. 2. выполняем необходимые операции. 3. уничтожаем объект. 4. принудительно вызываем GarbageCollect ( ) 5. переходим к следующей операции цикла. Замечу, что это все только мои рекомендации... --- С уважением, IKAR ikarhomecenter@narod.ru IkarHomeCenter ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 12:57 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
Пробовал и такой вариант. Память частично очищается, но все равно постепенно утекает, так что при большом количестве файлов это проблему не решает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 13:04 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
попробуй так не используй второй oleobject у меня утечки памяти нет PB 6.5.1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
=== Гришин Дмитрий ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 13:11 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
извини поторопился без второго ole не обойтись у меня вот с таким скриптом и памятью все в порядке, excel отжирает 4-5 мегабайт при старте и больше память не растет... до старта скрпипта 151 Мб занят при работе 155-156 по завершении опять 151... PB 6.5.1 Win2k Prof SP4 RUS Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
=== Гришин Дмитрий ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 13:41 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
Дмитрий, на самом деле без вторго oleobject вполне можно обойтись, примерно так Код: plaintext
Дело в том, что если просто конвертировать файл, проблем с памятью нет. Но в моем случае в excel еще задается оформление для диапозонов ячеек - шрифты, цвета и формулы. Чем больше таких извращений, тем больше утечка. По итогам экспериментов, самым экономичным вариантом остается тот, о котором писал Икар. Спасибо всем, кто откликнулся, если есть еще какие-то соображения, пожалуйста, поделитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 14:08 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
А с другой версией Excel что-то меняется? Или не зависит от этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 14:18 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
авторна самом деле без вторго oleobject вполне можно обойтись без него не обойтись, так как надо закрывать открытую книгу попробуй поставить Код: plaintext
авторНо в моем случае в excel еще задается оформление для диапозонов ячеек - шрифты, цвета и формулы. Чем больше таких извращений, тем больше утечка вот с этим трудно согласиться... сомневаюсь, чтобы excel при манипулировании свойствами ячеек отжирал память... где-то что-то у тебя остается в памяти чтобы в этом разобраться посмотри что за приложение отжирает память - PB или Excel... (например с помощью Process Explorer http://www.sysinternals.com/) после этого можно уже искать причину... если Excel - то смотри закрывает ли он файлы если Билдер - то смотри код. подключай функционал по мере нарастания сложности манипуляций - найдешь на чем происходит рост памяти... а постоянно поднимать новый экземпляр Excel.application и тут же его закрывать - это крайняя мера... хотя бы по 50-100 файлов, но не постоянно... === Гришин Дмитрий ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 14:36 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 14:55 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
авторПамять жрет не excel, а приложение на PB, версия Excel значения не имеет. А в том варианте, на котором я остановился excel.application один, уничтожается lole_workbook, а потом garbageCollect(). При таком раскладе все несколько лучше, чем с одним oleobject. если ты уверен, что память жрет PB, то тебе и карты в руки... ты же говоришь, что если форматирование не использовать, то все ОК... подключай постепенно функционал с форматированием ячеек и увидишь на каком месте у тебя в билдере что-то остается в памяти... наверняка ты используешь еще ole объекты для доступа к ячейкам или диапазонам Excel... PS Думаю, руки опускать рано... надо искать причину Кстати, ты не используешь в этом коде Describe("Evaluate(...)")? === Гришин Дмитрий ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 15:09 |
|
Экспорт в Excel и память
|
|||
---|---|---|---|
#18+
Ситуация была и у меня - почти один в один. Что только не перепробовал (PB 7.03 ). Обработка больших массивов информации с сохранением результатов обработки в EXCEL файле. "Out of memory" - замучил. Выяснил, что проблема была не с EXCEL, а в предке объекта PB - "u_progressbar". В предлагаемом скрипте его нет, но я когда искал причины проблемы его тоже не рассматривал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2004, 15:46 |
|
|
start [/forum/topic.php?fid=15&msg=32554064&tid=1339093]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 495ms |
0 / 0 |