Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
#1

Помогите побороть утечку памяти. - VB

24.01.2008, 16:53. Просмотров 1815. Ответов 21
Метки нет (Все метки)

Используется две формы:
1) Реализована в программе. Не имеет кнопки типа выход/закрыть. Закрывается через крестик Х. При повторном вызове отъедает у системы не фиговый кусок памяти. И так до бесконечности.

2) Обычный диалог открытия файла. Примерно такой же результат.

Что делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2008, 16:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Помогите побороть утечку памяти. (VB):

Как побороть ошибку Run-time error 7: Out of memory ?
Всем привет! В приложении возникает такая ошибка! Она возникает в момент,...

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление...

Найти утечку памяти
Приветствую всех! Много раз слышал, что с помощью CodeGuard можно проверить...

Найти утечку памяти
Помогите найти утечку памяти #include <stdio.h> #include <stdlib.h> struct...

Проверка на утечку памяти
Есть оконное приложение где куча контейнеров и т.д. Как можно проверить, есть...

Проверка на утечку памяти
Всем доброго времени суток. Сразу оговорюсь, я не профессионал,...

21
Ghost
24.01.2008, 17:26 #2
Form_Unload не поможет?
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
27.01.2008, 12:07  [ТС] #3
А чё писать в процедуре Form_Unload?
0
al2001
0 / 0 / 0
Регистрация: 30.08.2007
Сообщений: 32
27.01.2008, 12:34 #4
Может у тебя при создании формы создаются какие-нибудь объекты (типа set xxx=new yyy) а при выходе не уничтожаются set xxx=nothing?
0
Vsh
27.01.2008, 12:53 #5
Переменные формы уничтожаются не при unload, а при terminate
Как правило потеря памяти из за исп-я 'new'
SpiritWalker
0 / 0 / 1
Регистрация: 01.01.2008
Сообщений: 106
27.01.2008, 13:48 #6
Spartak, попробуй в событие Form_unload

написать
Set имя_формы=nothing
0
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
30.01.2008, 15:15  [ТС] #7
НИ ФИГА НЕ ПОМОГАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
Ghost
30.01.2008, 16:24 #8
Давай код на растерзание.
Или - где живешь?
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
30.01.2008, 16:52  [ТС] #9
Следующий код формирует форму, которая жрёт память

Private Sub cmdWithForm_Click()
Dim table_name As String, field_names() As String, temp_key() As String
Dim field_len() As Variant, temp_value() As Variant
Dim counter As Integer
Dim height As Long
height = 0
temp_key() = commontable_struct.GetAllKeys
temp_value() = commontable_struct.GetAllValues
ReDim field_names(3 To UBound(commontable_struct.GetAllKeys) + 3)
ReDim field_len(3 To UBound(commontable_struct.GetAllKeys) + 3)
table_name = Left(application_cfg.GetValue('txtCommonTable'), Len(application_cfg.GetValue('txtCommonTable')) - 4)
With frmEditTableWithForm
.adoTable.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0ata Source=' & App.Path & ';Extended Properties=DBase IV'
'.adoTable.ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=Falseata Source=dBASE Files;Initial Catalog=' & App.Path
.adoTable.RecordSource = 'Select * From ' & table_name & ' order by ' & External.GetFieldNameForOrder
For counter = 0 To UBound(temp_key)
field_names(counter + 3) = temp_key(counter)
field_len(counter + 3) = temp_value(counter)
Next
For counter = 3 To UBound(field_names) - 1
Load .Labels(counter)
Load .TextBoxes(counter)
.TextBoxes.Item(counter).DataField = field_names(counter)
Set .TextBoxes.Item(counter).DataSource = .adoTable
.Labels(counter).Top = .Labels(counter - 3).Top + 1.5 * .Labels(0).height
.Labels(counter).Left = .Labels(counter - 3).Left
.TextBoxes(counter).Top = .TextBoxes(counter - 3).Top + 1.5 * .TextBoxes(counter).height
.TextBoxes(counter).Left = .TextBoxes(counter - 3).Left
.TextBoxes(counter).Width = 20 * TextWidth('A')
.TextBoxes(counter).Locked = True
.Labels(counter).Caption = External.FieldNames(field_names(counter))
'.Labels(counter).Caption = field_names(counter)
.Labels(counter).Visible = True
.TextBoxes(counter).Visible = True
Next
.height = 1.5 * .TextBoxes(0).height * (UBound(field_names) + 1) / 3 + 800
.txtFioSearch.Left = .TextBoxes(0).Left
.txtFioSearch.Top = .TextBoxes(counter - 1).Top + 1.5 * .TextBoxes(counter - 1).height
.txtFioSearch.height = .TextBoxes(counter - 1).height
.txtFioSearch.Width = .TextBoxes(counter - 1).Width
.txtFioSearch.Visible = True
.lblFioSearch.Left = .Labels(0).Left
.lblFioSearch.Top = .Labels(counter - 1).Top + 1.5 * .TextBoxes(counter - 1).height
.lblFioSearch.height = .Labels(counter - 1).height
.lblFioSearch.Width = .Labels(counter - 1).Width
.lblFioSearch.Visible = True
.cmdPayment.Left = .TextBoxes(1).Left
.cmdPayment.Top = .txtFioSearch.Top
.cmdPayment.height = .txtFioSearch.height + 100
.cmdPayment.Width = .txtFioSearch.Width
.cmdRollback.Left = .TextBoxes(2).Left
.cmdRollback.Top = .txtFioSearch.Top
.cmdRollback.height = .txtFioSearch.height + 100
.cmdRollback.Width = .txtFioSearch.Width
End With
frmEditTableWithForm.Show vbModal
End Sub
0
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
03.02.2008, 09:41  [ТС] #10
ЭТО ПРОСТО УБИЙЦА СИСТЕМНЫХ РЕСУРСОВ!!!!!!!!!
SOS
0
spartak0
0 / 0 / 0
Регистрация: 28.10.2007
Сообщений: 160
03.02.2008, 10:24  [ТС] #11
Всем спасибо. Закрыл рекордсет в Unload. Память возвращается.
0
aaf
0 / 0 / 0
Регистрация: 26.12.2007
Сообщений: 435
14.04.2008, 09:14 #12
понимаю что давно закрытая тема, но тем не менее такой вопросец - можно получить список все открытых объектов и потом их позакрывать? прикинте люди как хорошо то получится? то же самое сделать и с формами! лафа всеобщая - не надо парится с лишними головными проблемами!
0
Ghost
14.04.2008, 10:33 #13
Легко, если создать собственный диспетчер объектов или знать, где и что поспрошать у системы.
aaf
0 / 0 / 0
Регистрация: 26.12.2007
Сообщений: 435
14.04.2008, 12:41 #14
Так то оно да, но может можно сделать что то типа:
for each object in form
close.object
next
диспетчер то зачем?
0
SPQuick
0 / 0 / 0
Регистрация: 22.10.2007
Сообщений: 44
14.04.2008, 12:53 #15
А ведь везде написано, что 'End' закроет всё сам.

Правда, если ты используешь API Create Process, Menu и прочую, непредусмотренную фигню (ну, конечно же не фигню, без этого не обойтись. ), то закрывай всё сам. Terminate, Destroed и пр. и др.
0
SPQuick
0 / 0 / 0
Регистрация: 22.10.2007
Сообщений: 44
14.04.2008, 12:54 #16
И, разумеется, UnLoad.
0
aaf
0 / 0 / 0
Регистрация: 26.12.2007
Сообщений: 435
14.04.2008, 12:59 #17
а к чему тогда такие проблемы у человека были? В смысле этот топик из-за чего поднимался то?
0
sugarde
0 / 0 / 0
Регистрация: 09.10.2007
Сообщений: 598
15.04.2008, 13:39 #18
Мужики, пoмoгите!
Ктo-нить пoльзуется Crystal Report Designer?

Удoбнo, приятнo, нo кaк oн пa@лa пaмять жрет! Кaк бoрoться?

При oткрытии первoй фoрмы с кoмпoнентoм для прoсмoтрa сьедaет 6Мб! Для кaждoй следующей пo 1.5Мб!

Мне не жaлкo (у всех пo 256Мб), нo ведь есть же кaкaя-тo сoвесть!

Я репoрту дaю ADO Recordset - oн егo oтoбрaжaет. (Кстaти, oн егo зaкрoет или нет?)

Пo зaкрытию фoрмы я выгружaю репoрт,
НO пo зaкрытию всех фoрм прoсмoтрщикoв первые 6Мб мне не вoзврaщaют!

Кaк бoрoться?
0
KMV
0 / 0 / 0
Регистрация: 15.11.2007
Сообщений: 45
20.04.2008, 13:09 #19
2 suqarde:
Встречный вопрос, а как вы ему вообще это рекордсет подсовываете ???, у меня получилость ему подсовывать только готовый отчет с фиксированным именем ODBC источника.
0
sugarde
0 / 0 / 0
Регистрация: 09.10.2007
Сообщений: 598
20.04.2008, 13:28 #20
2KMV

Есть тaкoй истoчник дaнных Active Data
Из негo пoдпункт Active Data (Field Definitions Only). Тaблицa сoздaется пo фaйлу в кoтoрoм лежaт именa и рaзмеры пoлей.
Врoде:

USERID (tab)LONG(tab)(tab)
USERNAME(tab)STRING(tab)16(tab)

(tab)-тaбуляция.
Именa пoлей игнoрируются, вaжен лишь пoрядoк (кaк я пoнял, хoтя этo и не слишкoм пoнятнo для РБД)
У всегo oтчетa есть oбьект Database.
В нем есть кoллекция типa DatabaseTable
A вoт у них (в яйце нa кoнце у зaйцa вo двoрце) есть метoд SetDataSource.

Принимaет DAO,ADO,CDO.
Зa пoдрoбнoстями RTFM.
Кстaти, в примерaх все именнo тaк и делaется.
2мне
Нет, тoвaрищ! Рекoрдсеты не зaкрывaются и чтo сaмoе дурнoе не вoзврaщaются. (нет GetDataSource - не нaшёл).

Успехoв!
Стaнислaв
0
20.04.2008, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2008, 13:28
Привет! Вот еще темы с решениями:

Выявить утечку памяти
Здравствуйте. Написал парсер с библиотекой для парсинга simple_html_dom. После...

Изолировать утечку памяти
Есть давний проект. В нем есть утечка памяти. Разобраться с самой утечкой -...

Поможите найти утечку памяти?
Добрый день. Написал для себя маленькую программку, которая проверяет...

Вопрос про утечку памяти в Qt
У меня вопрос. В этом коде: #include <QApplication> #include <QFont>...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru