|
Excel, проблема с освобождением памяти
|
|||
---|---|---|---|
#18+
Использую Visual Studio 10 версии, пишу на vb. Столкнулся с интересной проблемой. Имеется некая PDM-система, через которую запускается моя прога(создает не сложный отчет в экселе) Во время формирования этого документа эксель дико пожирает память, по 10-15 мб/сек, бывает и больше. Если отчет велик по объему, то частенько в виду нехватки оперативки программа выдает ошибку ("Сервер RPC недоступен") и отказывается дальше работать. Объект экселя создается так: Код: vbnet 1. 2. 3.
Интересность в том, что когда формирую отчет через "дебажинг", то все нормально, памяти расходуется не более 20мб. А когда сам экзешник вызывается из PDM-системы, то памяти каюк. Если с ярлыка на рабочем столе(к примеру) запускать .exe, то тоже все прекрасно работает(но это не удобно, т.к программ по формированию отчетов множество) . Вызов из PDM-системы происходит через функцию: Код: vbnet 1.
Формирование происходит в основном через выделение ячейки и запись в нее значения: Код: vbnet 1. 2.
Документ создается не с нуля, а берутся шаблоны (титульный лист и "лист для всех остальных листов"). Соответственно в титульный лист копипастом вставляется шаблон последующих листов Подскажите пожалуйста, в чем может быть причина такого поведения Excel`я и можно ли как-нибудь освобождать память для объекта Excel во время формирования отчета... ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2015, 14:01 |
|
Excel, проблема с освобождением памяти
|
|||
---|---|---|---|
#18+
для начала так: Код: vbnet 1.
Далее - запись по одной ячейке - это дикие тормоза, лучше сформировать массив в памяти (необязательно весь отчет, можно просто большими кусками) и вставлять его на лист, это будет на порядки быстрее, возможно решит и проблемы с утечками Далее, а стоит ли использовать Interop? Почему не используется OpenXML SDK ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2015, 14:23 |
|
Excel, проблема с освобождением памяти
|
|||
---|---|---|---|
#18+
шК0ДЕРИнтересность в том, что когда формирую отчет через "дебажинг", то все нормально, памяти расходуется не более 20мб.Попробуйте периодически отдавать управление системе - в VBA/VB6 это DoEvents . Удалите из кода Select, Selection, Activecell. Где-то тут есть статья по этому поводу. В частности, приведенный код можно заменить на следующий, с выигрышем по ресурсам: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2015, 14:28 |
|
Excel, проблема с освобождением памяти
|
|||
---|---|---|---|
#18+
Shocker.Pro, программа перешла ко мне "по наследству", 15 тысяч строк кода, нет охоты все переписывать под OpenXML SDK)) Казанский, DoEvents не помог Убираю из кода селекты, надеюсь, поможет, спасибо за советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2015, 15:59 |
|
Excel, проблема с освобождением памяти
|
|||
---|---|---|---|
#18+
Скорость вывода данных в эксель увеличилась, но память кушать так и продолжает. Еще раз хотелось бы отметить пару строк из первого поста: " когда сам экзешник вызывается из PDM-системы, то памяти каюк. Если с ярлыка на рабочем столе(к примеру) запускать .exe, то все прекрасно работает(но это не удобно, т.к программ по формированию отчетов множество) ". В чем может быть причина такого поведения программы? Через функцию ShellExecute пытался запускать прогу из PDM-системы, замест функции Shell, в итоге тоже самое получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2015, 09:24 |
|
|
start [/forum/topic.php?fid=61&gotonew=1&tid=2173492]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 151ms |
0 / 0 |