![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 и не имеет смысла, может из-за этого быть.
|
|
#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) вычисляет его. Это несколько медленнее. |
|
#13
|
|||
|
|||
|
Цитата:
Думаю, дело не в этом. Тут скорее всего косяк менеджера памяти. При вычислении extractFilePath(...) у тебя каждый раз создается новая строка и под нее распределяется память. Вероятно, в какой-то момент менеждер памяти "просечет", что у него куча неиспользованной памяти, и станет ее переиспользовать. С другой стороны, у тебя, ну если верить представленному коду, всегда вычисляется одна и та же строка при каждом событии таймера. Можно спросить, А НАФИГА?!! Такие вещи вычисляются один раз при старте программы, а потом просто используется готовое значение. |
|
#14
|
|||
|
|||
|
Цитата:
Последний раз редактировалось YoraG, 23.10.2013 в 03:21. |