Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.10.2013, 23:39
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию Программа жрет память

Столкнулся с проблемой, программа жрет оперативную память, на форме таймер и статус бар, в таймере интервал 1, в процедуре:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//StatusBar1.SimpleText:='Text';
end;

при том что так и запускаю с за комментированным текстом, получается процедура в пустую гоняет, но при этом объем используемой памяти постоянно увеличивается, если запускать с Timer1.Enabled=False соответственно используемая память не увеличивается.
Такое происходит в семерке х64, в хр х32 - нет, память не жрет, тут 2 варианта или из-за винды или из-за разрядности.

Так вот вопрос как с этим можно бороться???

Последний раз редактировалось YoraG, 19.10.2013 в 01:44.
Ответить с цитированием
  #2  
Старый 18.10.2013, 23:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Куда же такой маленький период выставлен? Меньше 10 и не имеет смысла, может из-за этого быть.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 19.10.2013, 00:12
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

Вряд ли, тут вообще бред какой-то происходит, оперу перезапустил (подвисла) и все, прога память перестала жрать, хотя чем она могла быть с ней связана???
Ответить с цитированием
  #4  
Старый 19.10.2013, 00:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от YoraG
...как с этим можно бороться???
Если такое повторится (а вдруг ;-), возможно поможет универсальное средство - перезапуск таймера
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:= false;
//StatusBar1.SimpleText:='Text';
Timer1.Enabled:= true;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
YoraG (19.10.2013)
  #5  
Старый 19.10.2013, 00:55
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

В общем проблема в другом, этот проект тестовый, а в моем проекте выявил такую проблему.
Тут память жрет:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
   begin
   if ComboBox8.Text='Новая почта' then
   if FileExists(ExtractFilePath(ParamStr(0))+'\Param\novpoch.lru') then
      begin
      действие
      end;
   end;

А так нет:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
   begin
   if ComboBox8.Text='Новая почта' then
 //if FileExists(ExtractFilePath(ParamStr(0))+'\Param\novpoch.lru') then
      begin
      действие
      end;
   end;

что тут можно освободить???

Последний раз редактировалось YoraG, 19.10.2013 в 01:35.
Ответить с цитированием
  #6  
Старый 19.10.2013, 01:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:

Пока ни кто не видел пжлст, отредактируйте ваш код с помощью тега
Код:
[СODE]ваш код[/СODE] (третья кнопка от края в нижнем ряду)
считывать его сразу станет веселее, да и модерам меньше работы.

Цитата:
Сообщение от YoraG
...что тут можно освободить???
Подозреваю что проблема скрыта в бегенде за формулировкой "действие" т.к. представленная часть кода проблем вызвать не может, просто нечему...
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
YoraG (19.10.2013)
  #7  
Старый 19.10.2013, 01:42
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

комментировал и "действие", опыты показали что память занимаемая увеличивается только при
Код:
if FileExists(ExtractFilePath(ParamStr(0))+'\Param\novpoch.lru') then
закомментировав эту строку все нормально. Находится это в процедуре таймера. интервал - 100
Ответить с цитированием
  #8  
Старый 19.10.2013, 01:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

а так будет утекать?
Код:
if FileExists('Param\novpoch.lru') then
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
YoraG (19.10.2013)
  #9  
Старый 19.10.2013, 01:52
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

У меня, если вместо ParamStr(0) указать Application.ExeName память жрать перестаёт

А, если выставить Интервал 1000, тоже всё ок.
Ответить с цитированием
  #10  
Старый 19.10.2013, 02:00
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
а так будет утекать?
Код:
if FileExists('Param\novpoch.lru') then
Действительно!!! Перестало!!!
Ответить с цитированием
  #11  
Старый 19.10.2013, 02:03
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Uniq!
У меня, если вместо ParamStr(0) указать Application.ExeName память жрать перестаёт

А, если выставить Интервал 1000, тоже всё ок.
На сколько я знаю Application.ExeName - возвращает путь моего ехе-шника, а там у меня проверка другого файла, а интервал 1000 - просто замедлял пожирание, ну спасибо Alegun - проблему пока решил...
Ответить с цитированием
  #12  
Старый 19.10.2013, 03:06
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от YoraG
...Тут память жрет:..
Возможно таймер не успевает отрабатывать код при 100 мСек и код запускается снова.

Application.ExeName уже "знает" имя проекта а ParamStr(0) вычисляет его. Это несколько медленнее.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 19.10.2013, 05:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от angvelem
Возможно таймер не успевает отрабатывать код при 100 мСек и код запускается снова.

Application.ExeName уже "знает" имя проекта а ParamStr(0) вычисляет его. Это несколько медленнее.

Думаю, дело не в этом.
Тут скорее всего косяк менеджера памяти. При вычислении extractFilePath(...) у тебя каждый раз создается новая строка и под нее распределяется память. Вероятно, в какой-то момент менеждер памяти "просечет", что у него куча неиспользованной памяти, и станет ее переиспользовать.

С другой стороны, у тебя, ну если верить представленному коду, всегда вычисляется одна и та же строка при каждом событии таймера. Можно спросить, А НАФИГА?!! Такие вещи вычисляются один раз при старте программы, а потом просто используется готовое значение.
Ответить с цитированием
  #14  
Старый 23.10.2013, 03:19
YoraG YoraG вне форума
Прохожий
 
Регистрация: 17.03.2011
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
С другой стороны, у тебя, ну если верить представленному коду, всегда вычисляется одна и та же строка при каждом событии таймера. Можно спросить, А НАФИГА?!! Такие вещи вычисляются один раз при старте программы, а потом просто используется готовое значение.
Во время выполнения программы проверяемый файл может быть обновлен, удален и тд., ну я переделал код и убрал проверку файла, теперь все нормально. ВСЕМ БОЛЬШОЕ СПАСИБО

Последний раз редактировалось YoraG, 23.10.2013 в 03:21.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter