|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Программа жрет память
Столкнулся с проблемой, программа жрет оперативную память, на форме таймер и статус бар, в таймере интервал 1, в процедуре:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin //StatusBar1.SimpleText:='Text'; end; при том что так и запускаю с за комментированным текстом, получается процедура в пустую гоняет, но при этом объем используемой памяти постоянно увеличивается, если запускать с Timer1.Enabled=False соответственно используемая память не увеличивается. Такое происходит в семерке х64, в хр х32 - нет, память не жрет, тут 2 варианта или из-за винды или из-за разрядности. Так вот вопрос как с этим можно бороться??? Последний раз редактировалось YoraG, 19.10.2013 в 01:44. |
#2
|
||||
|
||||
Куда же такой маленький период выставлен? Меньше 10 и не имеет смысла, может из-за этого быть.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
Вряд ли, тут вообще бред какой-то происходит, оперу перезапустил (подвисла) и все, прога память перестала жрать, хотя чем она могла быть с ней связана???
|
#4
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled:= false; //StatusBar1.SimpleText:='Text'; Timer1.Enabled:= true; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
YoraG (19.10.2013)
|
#5
|
|||
|
|||
В общем проблема в другом, этот проект тестовый, а в моем проекте выявил такую проблему.
Тут память жрет: Код:
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
|
||||
|
||||
Оффтоп:
Пока ни кто не видел пжлст, отредактируйте ваш код с помощью тега Код:
[СODE]ваш код[/СODE] (третья кнопка от края в нижнем ряду) Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
YoraG (19.10.2013)
|
#7
|
|||
|
|||
комментировал и "действие", опыты показали что память занимаемая увеличивается только при
Код:
if FileExists(ExtractFilePath(ParamStr(0))+'\Param\novpoch.lru') then |
#8
|
||||
|
||||
а так будет утекать?
Код:
if FileExists('Param\novpoch.lru') then Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
YoraG (19.10.2013)
|
#9
|
||||
|
||||
У меня, если вместо ParamStr(0) указать Application.ExeName память жрать перестаёт
А, если выставить Интервал 1000, тоже всё ок. |
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
Цитата:
|
#12
|
||||
|
||||
Цитата:
Application.ExeName уже "знает" имя проекта а ParamStr(0) вычисляет его. Это несколько медленнее. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
|||
|
|||
Цитата:
Думаю, дело не в этом. Тут скорее всего косяк менеджера памяти. При вычислении extractFilePath(...) у тебя каждый раз создается новая строка и под нее распределяется память. Вероятно, в какой-то момент менеждер памяти "просечет", что у него куча неиспользованной памяти, и станет ее переиспользовать. С другой стороны, у тебя, ну если верить представленному коду, всегда вычисляется одна и та же строка при каждом событии таймера. Можно спросить, А НАФИГА?!! Такие вещи вычисляются один раз при старте программы, а потом просто используется готовое значение. |
#14
|
|||
|
|||
Цитата:
Последний раз редактировалось YoraG, 23.10.2013 в 03:21. |