1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
||||||
1 | ||||||
1C 8.x Утечка памяти при использовании Native API20.02.2013, 11:24. Показов 3730. Ответов 17
Метки нет (Все метки)
Всем привет.
Я использую внешнюю компоненту, написанную на С++. При вызове процедур и функций этой библиотеки происходит утечка памяти! для примера вызывал процедуру, в которой ничего не происходило - и всё равно была утечка. за 1000000 вызовов около 30 метров оперативки захватывается 1С У кого нибудь была такая проблема? Мне требуется написать функцию, которая будет вызываться очень много раз, поэтому это очень критично. Код вызова процедуры:
0
|
20.02.2013, 11:24 | |
Ответы с готовыми решениями:
17
Создание Native API компонента для 1C Утечка памяти при использовании GLFW Утечка памяти при использовании Handler Утечка памяти при использовании setInterval() |
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
20.02.2013, 22:34 | 2 |
1. Какой релиз платформы?
2. А с чего Вы взяли что эти 30 метров, являются результатом вызова вашей функции?
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
21.02.2013, 05:42 [ТС] | 3 |
Я на 4-х разных функциях тестировал - как только запускаются - 1С захватывает всё больше памяти. как только заканчивается обработка - память перестаёт захватываться. но 1С не отдаёт её обратно. Также делал краш-тест: сделал цикл 100000000 итераций (на другой функции, не Sleep). спустя минут 15 1С вылетело с ошибкой нехватки памяти. Память мерил в диспетчере задач. Эти же тесты, но в MS Visual Studio работали нормально, то есть у меня утечки памяти нет. Значит, утечка происходит при вызове этой компоненты из 1С
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
21.02.2013, 09:31 | 4 |
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
21.02.2013, 09:33 [ТС] | 5 |
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
21.02.2013, 09:41 | 6 |
Да, вполне возможно. В одном из последних релизов, если мне не изменяет память, что то исправляли на эту тему.
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
22.02.2013, 09:03 [ТС] | 7 |
Добавлено через 18 часов 52 минуты Я посмотрел исправленные ошибки в последующих релизах - моей не нашёл. не помните, в каком релизе это было исправлено? хотя бы примерно Добавлено через 4 часа 18 минут
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
22.02.2013, 09:48 | 8 |
0
|
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
|
|
22.02.2013, 09:49 | 9 |
Кстати, согласен с гипотезой, что 1с не всегда возвращает память на место. Но уже давно забил на это, поскольку никакого реального дискомфорта пока не испытал, и вообще у 8 перестал это замечать. Ну, при кривой рекурсии штатно переполняется стек... Fenomen был абсолютно прав, когда намекнул на запускаемый процесс. Не он ли должен поставить память на место? Или ОС? Или где? Кроме разработчиков вряд ли кто скажет. Может, одинэсина действительно отводит память для запуска и "забывает" потом об этом? А от числа итераций в тестовом цикле "утечка" зависит?
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
22.02.2013, 11:15 [ТС] | 10 |
duk337, зависит. Я, вроде, писал это ранее. Чем больше итераций тем больше утечка памяти. вплоть до полного окончания памяти и вылета 1С
Добавлено через 1 минуту Память теряется даже если запускаешь процедуру без параметров, и в процедуре нет действий. Т.е. когда вообще ничего не создаётся и память не выделяется.
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
22.02.2013, 11:36 | 11 |
PowerLord, можно настроить технологический журнал на анализ событий с памятью (Насколько я помню там есть событие LEAK) и посмотреть, фиксирует ли сама платформа утечку, и если да то на какой операции.
0
|
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
|
|
22.02.2013, 13:06 | 12 |
Добавлю - хронометраж в отладчике. Хотя в отладчике может всё быть по-другому. Были прецеденты.
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
22.02.2013, 14:38 [ТС] | 13 |
Fenomen, а можно подробнее про журнал? где его смотреть/настраивать? жаль конфигурации нет под рукой, только в понедельник смогу посмотреть
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
|
22.02.2013, 14:44 | 14 |
http://www.gilev.ru/1c/81/techlog/
Плюс: Документация - Руководство администратора - Глава 6.11
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
22.02.2013, 14:45 [ТС] | 15 |
Спасибо.
0
|
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
|
||||||
25.02.2013, 10:39 | 17 | |||||
Давай ограничимся памятью. Попробуй так:
0
|
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
|
|
26.02.2013, 09:57 [ТС] | 18 |
Добавлено через 4 часа 54 минуты Проблема решена Библиотека, с которой я работал, также инициализировалась при старте 1С и уничтожалась при завершении работы программы. Я просто в неё добавил код и тестировал. Нашёл это случайно, написав новую библиотеку с одной тестовой функцией. при многократном вызове тестовой функции память всё также захватывается, но освобождается при уничтожении объекта компоненты, в конце обработки. С захватом памяти ничего сделать не получится, т.к. , скорее всего, память захватывает стек вызовов.
1
|
26.02.2013, 09:57 | |
26.02.2013, 09:57 | |
Помогаю со студенческими работами здесь
18
Утечка памяти при использовании хука Утечка памяти при использовании анимации Утечка памяти при использовании хандлера Утечка памяти при использовании системного счетчика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |