Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки и занимаемая память 
:(
    Опции темы
posta
Дата 18.8.2011, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.9.2005

Репутация: нет
Всего: нет



Ребята, подскажите кто знает по следующей проблеме:

В цикле создается 10 потоков по шаблону.
Каждый скачивает определенную инфу и самотерминируется.

Используется определенное количество памяти. Но при запуске нового цикла потоков - память только увеличивается. При терминировании потоков - память не уменьшается.

Код запуска потока:
Код

for i := 1 to 10 do
  begin
    
    ThreadBegin:=classThread.Create(True);
    ThreadBegin.FreeOnTerminate := True;
    try
      ThreadBegin.Url:= 'http://www...'
      ThreadBegin.Priority:=tpLower;
      ThreadBegin.Resume;
    except on EConvertError do
      begin
        ThreadBegin.Free;
        ShowMessage('Ошибка потока '+IntToStr(i));
      end;
    end;

  end;



Код потока:
Код

procedure classThread.Execute;
  var  
  i,j: integer;
  ls:TStringList;  
begin
  startThreads:=startThreads+1; // количество начатых потоков
  Form1.Memo1.Lines.Add('Поток начат');
  
  PostData(); // Скачка контента и его сохранение
            
  finishThreads:=finishThreads+1; // количество законченных потоков
  Synchronize(ShowResult);
  Form1.Memo1.Lines.Add('Поток закончен');
  
end;

procedure classThread.ShowResult;
begin  
  Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
end;

PM MAIL   Вверх
Akella
Дата 18.8.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
 При терминировании потоков - память не уменьшается.


Как ты это определяешь? И через сколько времени ты это определяешь?
PM MAIL   Вверх
posta
Дата 18.8.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.9.2005

Репутация: нет
Всего: нет



Цитата(Akella @ 18.8.2011,  10:34)
Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
 При терминировании потоков - память не уменьшается.


Как ты это определяешь? И через сколько времени ты это определяешь?


Память определяю через Process Explorer
При каждом запуске потоков - память увеличивается.

Лики смотрел через FastMM4. Он ничего не видит.



Это сообщение отредактировал(а) posta - 18.8.2011, 11:00
PM MAIL   Вверх
northener
Дата 18.8.2011, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
Form1.Memo1.Lines.Add('Поток начат');

Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
Form1.Memo1.Lines.Add('Поток закончен');

Это жестоко!



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
posta
Дата 18.8.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.9.2005

Репутация: нет
Всего: нет



Цитата(northener @ 18.8.2011,  11:30)
Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
Form1.Memo1.Lines.Add('Поток начат');

Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
Form1.Memo1.Lines.Add('Поток закончен');

Это жестоко!

Ну это для меня, наглядно. тут половину фукнциональности лога убрал для простоты
PM MAIL   Вверх
bagos
Дата 18.8.2011, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



PM MAIL   Вверх
kami
Дата 18.8.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(posta @  18.8.2011,  11:45 Найти цитируемый пост)
Ну это для меня, наглядно. тут половину фукнциональности лога убрал для простоты

Это жестоко по отношению к VCL потоку - работать с визуальными компонентами из дополнительного потока.
Может, утечки идут в 
Цитата(posta @  18.8.2011,  09:12 Найти цитируемый пост)
PostData(); // Скачка контента и его сохранение

Что там?
PM MAIL WWW   Вверх
Akella
Дата 18.8.2011, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



posta, ты дал не полный ответ
PM MAIL   Вверх
Akella
Дата 18.8.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Я на что намекаю? На то, что память в кучу винда себе не сразу забирает. И это нормально.
PM MAIL   Вверх
Alexeis
Дата 19.8.2011, 07:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Насколько я знаю, менджер памяти, вообще не возвращает память винде, оставляя ее у себя про запас. Если 1 раз понадобилось, возможно еще раз понадобиться.
  1) Избавьтесь от работы с VCL в потоке
  2) Проверьте динамику роста. Скажем одинаков ли прирост при каждом запуске, выходит ли он на насыщение и т.д. Кроме того укажите какую именно колонку вы смотрели Virtual Size / Private memory / Working Set .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 19.8.2011, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Alexeis @  19.8.2011,  07:18 Найти цитируемый пост)
Насколько я знаю, менджер памяти, вообще не возвращает память винде, оставляя ее у себя про запас. Если 1 раз понадобилось, возможно еще раз понадобиться.

а я про что, но, видать, автор темы, не удосужился об этом почитать пере тем как использовать потоки и вообще начать программировать smile
PM MAIL   Вверх
posta
Дата 19.8.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.9.2005

Репутация: нет
Всего: нет



Цитата(Akella @  19.8.2011,  09:15 Найти цитируемый пост)
Цитата(Alexeis @  19.8.2011,  07:18 )
Насколько я знаю, менджер памяти, вообще не возвращает память винде, оставляя ее у себя про запас. Если 1 раз понадобилось, возможно еще раз понадобиться.

а я про что, но, видать, автор темы, не удосужился об этом почитать пере тем как использовать потоки и вообще начать программировать  


да, про это не знал.. каюсь.

Нашел утечку, в используемом стороннем компоненте - (используется в методе PostData) -  по оконцовке работы не освобождался Стринглист. Пришлось разбираться в коде и исправлять.

А так стабильно программа из 5 мегов в памяти, при запуске потоков, превращается в 20 мегов и стабильно работает на этом уровне. сколько бы раз цикл потоков не стартовал.

Всех благодарю за помощь. Спасибо. 

Это сообщение отредактировал(а) posta - 19.8.2011, 10:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.