Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2011, 21:15   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Освобождение памяти после запуска TOpenDialog

Заметил, что после запуска диалога открытия файлов, память после его закрытия и освобождения (Free) не очищается. Видимо эта память используется для более быстрого открытия диалога в следующий раз, но дело в том, что занятой памяти остаётся очень много, порядка 30 Мб. Кто сталкивался с данной проблемой? Как её можно решить?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 13.09.2011, 21:30   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
и освобождения (Free) не очищается. Видимо эта память используется для более быстрого открытия диалога в следующий раз,
Невозможно. Оконный манагер памяти не позволит такой байды.
Процесс, вызвав FreeMem чего-либо занятого им, освобождает выделеную память от "привязки" к своему АП и ранее занятая паметь обнуляется и отходит в общую кучу(Неитральна). И Повтороно, не выделил из кучи память, процесс неможет её использовать.

Показывайте код....
1. как создаёте TOpenDialog
2. У винды есть механизм который позволяет "запоминать" папки в котрых был юзер.
Таким образом быстродействие "хождения" по папкам для юзера быстрее т.к. система уже знает что лежит в папке, в которую лезет юзер и не нуждается в рескане папки. А просто проверяет чего нет в списке(Если нет/есть, то добовляет/удаляет).

Последний раз редактировалось Человек_Борща; 13.09.2011 в 21:37.
Человек_Борща вне форума Ответить с цитированием
Старый 13.09.2011, 21:38   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Код:
procedure TMainForm.bAddClick(Sender: TObject);
var odTracks: TOpenDialog;
begin
 odTracks:=TOpenDialog.Create(Self);
 try
  if odTracks.Execute then
   lbPlayList.Items.Add(odTracks.FileName);
 finally
  odTracks.Free;
 end;
end;
Слышал от друга, что есть процедура WinAPI, которая освобождает память после использования диалогов, но вот вспомнить её не смог.
Возможно Я Быдлокодер ©.

Последний раз редактировалось t2skler; 13.09.2011 в 21:43.
t2skler вне форума Ответить с цитированием
Старый 13.09.2011, 21:46   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Всё правильно. Только:
Код:
FreeAndNil(odTracks);
В остальном вы правы. Система держит информацию о том куда вы совали нос(неважно из чего). И в последствии просто быстро воспроизводит записаную ранее информацию для вас.

Если ваша программа "кушает" память, то ошибка явно в другом месте....
Человек_Борща вне форума Ответить с цитированием
Старый 13.09.2011, 21:52   #5
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Всё правильно. Только:
Код:
FreeAndNil(odTracks);
В остальном вы правы. Система держит информацию о том куда вы совали нос(неважно из чего). И в последствии просто быстро воспроизводит записаную ранее информацию для вас.

Если ваша программа "кушает" память, то ошибка явно в другом месте....
С пустой формой при запуске диалога абсолютно такая же ситуация.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 13.09.2011, 22:05   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Сообщение от t2skler Посмотреть сообщение
С пустой формой при запуске диалога абсолютно такая же ситуация.
Как это выражено?
Человек_Борща вне форума Ответить с цитированием
Старый 13.09.2011, 22:43   #7
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Как это выражено?
Открытие диалога +25 Мб оперативной памяти, закрытие диалога, память остаётся занятой.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 13.09.2011, 23:03   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

У вас все правильно.
Если код такой:
Код:
var
  dlg:TOpenDialog;
begin
dlg:=TOpenDialog.Create(Self);
try
if Dlg.execute then 
{smth code here}
finally
FreeAndNil(dlg);
end;
end;
Может что-то ещё в коде при открытии диалога?

И какая версия delphi?

Пробоали кинуть компонент на форму использовать?
Человек_Борща вне форума Ответить с цитированием
Старый 14.09.2011, 02:19   #9
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
У вас все правильно.
Если код такой:
Код:
var
  dlg:TOpenDialog;
begin
dlg:=TOpenDialog.Create(Self);
try
if Dlg.execute then 
{smth code here}
finally
FreeAndNil(dlg);
end;
end;
Может что-то ещё в коде при открытии диалога?

И какая версия delphi?

Пробоали кинуть компонент на форму использовать?
Я кинул полный код. D7. Сначала именно так и сделал, но увы одно и тоже.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти после исключения Syuf Общие вопросы C/C++ 10 28.05.2011 12:28
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36