2009-03-23 1 views
1

Может ли программа VB6, не содержащая ключевое слово «Новый», иметь утечки памяти?VB6 Memory Leak

Если да, просьба привести пример.

+0

Вопрос немного плохо сформулирован. Я предполагаю, что вы имеете в виду «Возможно ли иметь утечки памяти в VB6, когда вы не используете объекты, т. Е. Существуют ли причины, отличные от хорошо известной проблемы с заданием окружения с объектами». Боб не понимает, что вы имеете в виду. Можете ли вы переформулировать вопрос? – MarkJ

ответ

3

Возможно, вы вызываете DLL третьей стороны, у которой есть утечки памяти.

2

Да, это возможно. Прежде чем я узнал об утечке памяти в конкретном вызове Windows API, программа VB6, которую я написал, использовала Transparent Blits, обнаружила утечку памяти. Итак, хотя утечка не была в самой программе, она была в одной из функций, которые VB6 вызывал в Win32 API.

0

У нас была утечка с использованием глобальных переменных в модуле во время работы под COM +. Это было давно, не помню специфику.

1

... и не забывающие утечки памяти в OCXs

4

Суммируя ответы до сих пор: вызов другого компонента может ввести утечки памяти. Компонент может быть неисправен, или вы можете злоупотреблять им. Компонент может быть OCX или DLL (включая вызовы API в Windows DLL, что является отличным способом утечки памяти и ресурсов Windows, не говоря уже о множестве других захватывающих проблем).

И педантичная точка: вы можете создавать объекты с помощью CreateObject, чтобы вы могли просочиться через circular references, не используя New. И onedaywhen указал в комментариях, что вы также можете создавать круговые ссылки с переменными формы без использования New. Но я думаю, что вопрос в том, могут ли утечки памяти VB6 иметь другие причины, кроме круговых ссылок.


Рекурсивный-х answer не вызывает утечку памяти - подсчет ссылок будет прибраться память о каждом выполнении цикла - см мой комментарий к ответу.

+0

Еще одна точка подвески: вы можете создавать круговые ссылки с использованием экземпляров VB.Form, которые можно загрузить без использования ключевого слова New. – onedaywhen

0

Что это за одержимость Новым в отношении утечек памяти? Я не вижу никаких отношений, кроме выделения другого объекта, прикоснувшись к ссылочной переменной после установки в Nothing.

Если вы это сделаете, у вас, вероятно, есть логическая ошибка. Не использовать New просто означает, что вы взорваетесь, вряд ли моя идея «фиксировать» что угодно.

Наихудшие утечки могут включать вызовы API, подобные тем, которые выполняются в процедурах OLE или GDI, которые требуют явной очистки/освобождения неявно выделенных структур данных.

Но, как я уже сказал, ассоциирование New с утечками памяти звучит для меня орехами.

+0

Я думаю, что вопрос немного плохо сформулирован. Я думаю, что это означает: «Существуют ли причины утечек памяти в VB6, когда вы не используете объекты, т. Е. Помимо хорошо известной проблемы с заданием окружения с объектами». – MarkJ