Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
1
1C 8.x

Утечка памяти при использовании Native API

20.02.2013, 11:24. Показов 3730. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Я использую внешнюю компоненту, написанную на С++.
При вызове процедур и функций этой библиотеки происходит утечка памяти! для примера вызывал процедуру, в которой ничего не происходило - и всё равно была утечка. за 1000000 вызовов около 30 метров оперативки захватывается 1С
У кого нибудь была такая проблема?
Мне требуется написать функцию, которая будет вызываться очень много раз, поэтому это очень критично.

Код вызова процедуры:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.AddInNative", "Comp") Тогда 
        Попытка
            глAddInNative = Новый("AddIn.Comp.AddInNativeExtension");
        Исключение
            Сообщить("Фейл");
        КонецПопытки;
    КонецЕсли;    
    
    ТаймерСтарт = глAddInNative.Milliseconds;
    Для Счетчик = 1 По 100000 Цикл
        глAddInNative.Sleep(1);
    КонецЦикла;
    ТаймерСтоп = глAddInNative.Milliseconds;
    глAddInNative = Неопределено;
    Сообщить("Затрачено времени С++: " + (ТаймерСтоп - ТаймерСтарт));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2013, 11:24
Ответы с готовыми решениями:

Создание Native API компонента для 1C
Задача состоит в том чтобы сделать внешний компонент который сможет обрабатывать события типа...

Утечка памяти при использовании GLFW
Здравствуйте! Заинтересовался технологией GLFW. Скомпилировал библиотеки, взял код из их...

Утечка памяти при использовании Handler
Добрый день, многоуважаемые форумчане :). Прошу помощи в решении проблемы. Приведу несложный...

Утечка памяти при использовании setInterval()
Доброго времени суток! есть php файл view.php, в котором выводятся в таблицу и оборачиваются в...

17
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
Какой релиз платформы?
8.2

А с чего Вы взяли что эти 30 метров, являются результатом вызова вашей функции?
Замерял. включил 1С и запустил эту обработку.
Я на 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
Цитата Сообщение от PowerLord Посмотреть сообщение
8.2
Полный номер релиза?
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
Цитата Сообщение от PowerLord Посмотреть сообщение
Не помню, сейчас не на работе. завтра скажу. а что, думаете в более новой версии эта бага пофикшена?
Да, вполне возможно. В одном из последних релизов, если мне не изменяет память, что то исправляли на эту тему.
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
22.02.2013, 09:03  [ТС] 7
Да, вполне возможно. В одном из последних релизов, если мне не изменяет память, что то исправляли на эту тему.
Спасибо, посмотрю список изменений в релизах.Не помните, в каком именно?

Добавлено через 18 часов 52 минуты
Полный номер релиза?
8.2.13.205
Я посмотрел исправленные ошибки в последующих релизах - моей не нашёл. не помните, в каком релизе это было исправлено? хотя бы примерно

Добавлено через 4 часа 18 минут
В одном из последних релизов, если мне не изменяет память, что то исправляли на эту тему.
Установил релизы 8.2.15.319, 8.2.16.368, 8.2.17.169 (последний) - во всех утечка памяти.
0
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
22.02.2013, 09:48 8
Цитата Сообщение от PowerLord Посмотреть сообщение
Установил релизы 8.2.15.319, 8.2.16.368, 8.2.17.169 (последний) - во всех утечка памяти.
Тогда только в 1С писать. На платформой мы не властны.
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
22.02.2013, 09:49 9
Цитата Сообщение от PowerLord Посмотреть сообщение
Установил релизы 8.2.15.319, 8.2.16.368, 8.2.17.169 (последний) - во всех утечка памяти.
Кстати, согласен с гипотезой, что 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
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
25.02.2013, 03:58  [ТС] 16
настроить технологический журнал
Нашёл конфиг тут, создал папки. Что-то залогировалось, но про память ничего не было.

Fenomen, посмотри ссылку выше, конфиг ведь правильно настроен для моего случая?
0
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680
25.02.2013, 10:39 17
Давай ограничимся памятью. Попробуй так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <dump create="false"/>
    <log location="c:\v82\logs" history="168">
        <event>
            <eq property="name" value="leaks"/>
        </event>
        <event>
            <eq property="name" value="mem"/>
        </event>
        <property name="all">
            <event>
                <eq property="name" value="leaks"/>
            </event>
            <event>
                <eq property="name" value="mem"/>
            </event>
        </property>
    </log>
</config>
Результат выкладывай. Посмотрю, но только уже вечером.
0
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
26.02.2013, 09:57  [ТС] 18
Результат выкладывай
Нет результата. файлы логов пустые

Добавлено через 4 часа 54 минуты
Проблема решена

Библиотека, с которой я работал, также инициализировалась при старте 1С и уничтожалась при завершении работы программы. Я просто в неё добавил код и тестировал. Нашёл это случайно, написав новую библиотеку с одной тестовой функцией.
при многократном вызове тестовой функции память всё также захватывается, но освобождается при уничтожении объекта компоненты, в конце обработки.

С захватом памяти ничего сделать не получится, т.к. , скорее всего, память захватывает стек вызовов.
1
26.02.2013, 09:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2013, 09:57
Помогаю со студенческими работами здесь

Утечка памяти при использовании хука
Добрый вечер. Есть Directx hook для x86 под DX9 на C++ . После инжекта в запускается поток с 2-мя...

Утечка памяти при использовании анимации
Приветствую. Проблема такова: использую анимацию на JQuery, и RAM в Firefox растет каждую секунду...

Утечка памяти при использовании хандлера
new Handler().postDelayed(new Runnable() { @Override public void run() { ...

Утечка памяти при использовании системного счетчика
Есть некий класс с событием upTimeUpdated (подписчикам отдается время работы ОС) public class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru