powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, проблема с освобождением памяти
5 сообщений из 5, страница 1 из 1
Excel, проблема с освобождением памяти
    #38953572
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую Visual Studio 10 версии, пишу на vb. Столкнулся с интересной проблемой.
Имеется некая PDM-система, через которую запускается моя прога(создает не сложный отчет в экселе)
Во время формирования этого документа эксель дико пожирает память, по 10-15 мб/сек, бывает и больше. Если отчет велик по объему, то частенько в виду нехватки оперативки программа выдает ошибку ("Сервер RPC недоступен") и отказывается дальше работать.
Объект экселя создается так:
Код: vbnet
1.
2.
3.
Public Excel As Microsoft.Office.Interop.Excel.Application
***
Excel = CreateObject("excel.application")


Интересность в том, что когда формирую отчет через "дебажинг", то все нормально, памяти расходуется не более 20мб.
А когда сам экзешник вызывается из PDM-системы, то памяти каюк. Если с ярлыка на рабочем столе(к примеру) запускать .exe, то тоже все прекрасно работает(но это не удобно, т.к программ по формированию отчетов множество) .
Вызов из PDM-системы происходит через функцию:
Код: vbnet
1.
 Shell ("путь к .exe", ebNormalFocus)


Формирование происходит в основном через выделение ячейки и запись в нее значения:
Код: vbnet
1.
2.
Excel.Range("ИМЯ СТОЛБЦА" & VB6.Format(НОМЕР СТРОКИ)).Select()
Excel.ActiveCell.FormulaR1C1 = "КАКОЙ ТО ТЕКСТ ИЛИ ЗНАЧЕНИЕ" 


Документ создается не с нуля, а берутся шаблоны (титульный лист и "лист для всех остальных листов"). Соответственно в титульный лист копипастом вставляется шаблон последующих листов

Подскажите пожалуйста, в чем может быть причина такого поведения Excel`я и можно ли как-нибудь освобождать память для объекта Excel во время формирования отчета... ?
...
Рейтинг: 0 / 0
Excel, проблема с освобождением памяти
    #38953609
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала так:

Код: vbnet
1.
Excel.Range("ИМЯ СТОЛБЦА" & VB6.Format(НОМЕР СТРОКИ)).FormulaR1C1 = "КАКОЙ ТО ТЕКСТ ИЛИ ЗНАЧЕНИЕ" 



Далее - запись по одной ячейке - это дикие тормоза, лучше сформировать массив в памяти (необязательно весь отчет, можно просто большими кусками) и вставлять его на лист, это будет на порядки быстрее, возможно решит и проблемы с утечками

Далее, а стоит ли использовать Interop? Почему не используется OpenXML SDK
...
Рейтинг: 0 / 0
Excel, проблема с освобождением памяти
    #38953614
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
шК0ДЕРИнтересность в том, что когда формирую отчет через "дебажинг", то все нормально, памяти расходуется не более 20мб.Попробуйте периодически отдавать управление системе - в VBA/VB6 это DoEvents .

Удалите из кода Select, Selection, Activecell. Где-то тут есть статья по этому поводу. В частности, приведенный код можно заменить на следующий, с выигрышем по ресурсам:
Код: vbnet
1.
Excel.Range("ИМЯ СТОЛБЦА" & VB6.Format(НОМЕР СТРОКИ)).FormulaR1C1 = "КАКОЙ ТО ТЕКСТ ИЛИ ЗНАЧЕНИЕ"
...
Рейтинг: 0 / 0
Excel, проблема с освобождением памяти
    #38953753
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, программа перешла ко мне "по наследству", 15 тысяч строк кода, нет охоты все переписывать под OpenXML SDK))
Казанский, DoEvents не помог
Убираю из кода селекты, надеюсь, поможет, спасибо за советы!
...
Рейтинг: 0 / 0
Excel, проблема с освобождением памяти
    #38962240
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорость вывода данных в эксель увеличилась, но память кушать так и продолжает.
Еще раз хотелось бы отметить пару строк из первого поста:
" когда сам экзешник вызывается из PDM-системы, то памяти каюк. Если с ярлыка на рабочем столе(к примеру) запускать .exe, то все прекрасно работает(но это не удобно, т.к программ по формированию отчетов множество) ".
В чем может быть причина такого поведения программы?

Через функцию ShellExecute пытался запускать прогу из PDM-системы, замест функции Shell, в итоге тоже самое получилось
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, проблема с освобождением памяти
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]