Может ли программа VB6, не содержащая ключевое слово «Новый», иметь утечки памяти?VB6 Memory Leak
Если да, просьба привести пример.
Может ли программа VB6, не содержащая ключевое слово «Новый», иметь утечки памяти?VB6 Memory Leak
Если да, просьба привести пример.
Возможно, вы вызываете DLL третьей стороны, у которой есть утечки памяти.
Да, это возможно. Прежде чем я узнал об утечке памяти в конкретном вызове Windows API, программа VB6, которую я написал, использовала Transparent Blits, обнаружила утечку памяти. Итак, хотя утечка не была в самой программе, она была в одной из функций, которые VB6 вызывал в Win32 API.
У нас была утечка с использованием глобальных переменных в модуле во время работы под COM +. Это было давно, не помню специфику.
... и не забывающие утечки памяти в OCXs
Суммируя ответы до сих пор: вызов другого компонента может ввести утечки памяти. Компонент может быть неисправен, или вы можете злоупотреблять им. Компонент может быть OCX или DLL (включая вызовы API в Windows DLL, что является отличным способом утечки памяти и ресурсов Windows, не говоря уже о множестве других захватывающих проблем).
И педантичная точка: вы можете создавать объекты с помощью CreateObject
, чтобы вы могли просочиться через circular references, не используя New
. И onedaywhen указал в комментариях, что вы также можете создавать круговые ссылки с переменными формы без использования New
. Но я думаю, что вопрос в том, могут ли утечки памяти VB6 иметь другие причины, кроме круговых ссылок.
Рекурсивный-х answer не вызывает утечку памяти - подсчет ссылок будет прибраться память о каждом выполнении цикла - см мой комментарий к ответу.
Еще одна точка подвески: вы можете создавать круговые ссылки с использованием экземпляров VB.Form, которые можно загрузить без использования ключевого слова New. – onedaywhen
Что это за одержимость Новым в отношении утечек памяти? Я не вижу никаких отношений, кроме выделения другого объекта, прикоснувшись к ссылочной переменной после установки в Nothing.
Если вы это сделаете, у вас, вероятно, есть логическая ошибка. Не использовать New просто означает, что вы взорваетесь, вряд ли моя идея «фиксировать» что угодно.
Наихудшие утечки могут включать вызовы API, подобные тем, которые выполняются в процедурах OLE или GDI, которые требуют явной очистки/освобождения неявно выделенных структур данных.
Но, как я уже сказал, ассоциирование New с утечками памяти звучит для меня орехами.
Я думаю, что вопрос немного плохо сформулирован. Я думаю, что это означает: «Существуют ли причины утечек памяти в VB6, когда вы не используете объекты, т. Е. Помимо хорошо известной проблемы с заданием окружения с объектами». – MarkJ
Вопрос немного плохо сформулирован. Я предполагаю, что вы имеете в виду «Возможно ли иметь утечки памяти в VB6, когда вы не используете объекты, т. Е. Существуют ли причины, отличные от хорошо известной проблемы с заданием окружения с объектами». Боб не понимает, что вы имеете в виду. Можете ли вы переформулировать вопрос? – MarkJ