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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2012, 23:15   #1
satanaFF
 
Регистрация: 10.11.2011
Сообщений: 3
По умолчанию Delphi XE2 программа съедает весь процессор

В Delphi XE компилировал и нормально работала программа. Надо было прогу запилить под 64 платформу. Поставил XE2 скомпилил. Через 5-10 минут прога начинает жрать немеренно процессорного времени пока не сожрет все. Код штудировал - нет ничего такого где могла бы тупить прога.
Мб знает что делать, как быть?

Код:
procedure TNewThread.Execute;
begin
 FreeOnTerminate:=true;
 CurSite:=-1;
 Work:=true;
 CurProxy:=CurProxyX;
 ProxyAdr:= Copy(DataProxy[CurProxy],1,Pos(':',DataProxy[CurProxy])-1);
 ProxyPort:= Copy(DataProxy[CurProxy],Pos(':',DataProxy[CurProxy])+1,Length(DataProxy[CurProxy]));
 HTTP:=TIdHTTPEx.create;
 HTTP.HandleRedirects:= False;
 HTTP.Request.Accept:= 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
 HTTP.Request.AcceptLanguage:= 'ru,en-us;q=0.7,en;q=0.3';
 HTTP.Request.AcceptEncoding:= 'gzip,deflate';
 HTTP.Request.AcceptCharSet:= 'windows-1251,utf-8;q=0.7,*;q=0.7';
 HTTP.Request.Connection:= 'keep-alive';
 HTTP.Request.CustomHeaders.Add('Keep-Alive: 300');
 //HTTP.ConnectTimeout:=10000;
 //HTTP.ReadTimeout:=10000;
 HTTP.ProxyParams.ProxyServer:= ProxyAdr;
 HTTP.ProxyParams.ProxyPort:= StrToInt(ProxyPort);
 while Work do begin
  // CS.Enter;
   if CurSite<DataSites.Count-1 then Inc(CurSite) else begin
     Work:=false;
     Synchronize(Sett);
   end;
     FSite:=Copy(DataSites[CurSite],1,Pos(';',DataSites[CurSite])-1);
     TRef:=Copy(DataSites[CurSite],1,Pos('|',DataSites[CurSite])-1);
     FRef:=Copy(TRef,Pos(';',DataSites[CurSite])+1,Length(DataSites[CurSite]));
     FClick:=Copy(DataSites[CurSite],Pos('|',DataSites[CurSite])+1,Length(DataSites[CurSite]));
  // CS.Leave;
     HTTP.SendReferer:= False;
     HTTP.Request.UserAgent:= GetRandomUserAgent;
     HTTP.Request.Referer:= 'http://'+FRef;
     try
       HTTP.GetEx('http://'+FSite);
       R:=Random(7);
       if R<>0 then begin
         try
           HTTP.SendReferer:=True;
           HTTP.GetEx('http://'+FSite+FClick);
           Rez:= 1;
         except
           //Form1.Memo1.Lines.Add(inttostr(CurSite)+' except '+inttostr(http.ResponseCode));
           if http.ResponseCode=302 then Rez:= 1 else Rez:= -1;
         end;
       end;
     except
       Rez:= -1;
     end;
     Synchronize(Sync);
  end;
 HTTP.Free;
 dec(Thread);
end;

procedure TNewThread.Sett;
begin
 Form1.Label7.Caption:=IntToStr(StrToInt(Form1.Label7.Caption)-1);
 Form1.Label12.Caption:=IntToStr(StrToInt(Form1.Label12.Caption)+1);
end;

procedure TNewThread.Sync;
begin
 Form1.Label9.Caption:= FRef;
 case Rez of
   1:begin
      Form1.GoodLabel.Caption:=IntToStr(StrToInt(Form1.GoodLabel.Caption)+1);
      Form1.Gauge1.Progress:=Form1.Gauge1.Progress+1;
     end;
  -1:begin
      Form1.BadLabel.Caption:=IntToStr(StrToInt(Form1.BadLabel.Caption)+1);
      Form1.Gauge1.Progress:=Form1.Gauge1.Progress+1;
     end;
 end;
end;
создается 500 потоков, затем досоздаются новые заместо завершенных чтобы общее число было 500
Все было норм когда компилил в делфе ХЕ
satanaFF вне форума Ответить с цитированием
Старый 31.05.2012, 00:17   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Ну и правильно что тормозит, все дело в синхронизации, как я понял, 500 потоков одновременно хотят изменять значения двуих кепшенов.
И я не пойму, прога оперативу ест или ЦП?
Delphi_ProGer вне форума Ответить с цитированием
Старый 31.05.2012, 00:28   #3
satanaFF
 
Регистрация: 10.11.2011
Сообщений: 3
По умолчанию

при компиляции на XE программа стабильно работала и ничего не ела, а при компиляции в XE2 через 5-10 минут начинает дико жрать ЦП (с 10 процентов до 100 съедает i5 760 и комп просто виснес если вовремя не убил программу или не оставил одно ядро системе).

мне интересно с чего это 500 потоков хотят одновременно изменять 2 кэпшена, написано же Synchronize(Sync); Synchronize(Sett); - разве это не должно как раз заставлять потоки не тупить при записи? или в XE2 Synchronize изменен???

убрал все Synchronize и записили label.caption. 500 потоков без добавления новый. все равно сжирает весь проц, хз в чем беда

Последний раз редактировалось satanaFF; 31.05.2012 в 00:46.
satanaFF вне форума Ответить с цитированием
Старый 31.05.2012, 08:02   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ну так продолжайте убирать фрагменты кода дальше - пока не прекратится нежелательный эффект. Значит, в этом месте и ошибка.
s-andriano вне форума Ответить с цитированием
Старый 31.05.2012, 08:19   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

раз так сжирает проц, то как вариант есть где то бесконечный цикл, который и грузит всё.
FaTaL вне форума Ответить с цитированием
Старый 31.05.2012, 16:29   #6
satanaFF
 
Регистрация: 10.11.2011
Сообщений: 3
По умолчанию

цикл только один, он прекрасно работает.
убирать нечего больше
satanaFF вне форума Ответить с цитированием
Старый 31.05.2012, 18:56   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Чудес не бывает - ищите.
s-andriano вне форума Ответить с цитированием
Старый 01.06.2012, 07:10   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
что делать, как быть?
Run / Pause + руки.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PNG в Delphi XE2 volod3000 Мультимедиа в Delphi 0 16.01.2012 23:12
Delphi XE2 TorrentTor Общие вопросы Delphi 4 05.12.2011 19:06
Embarcadero Delphi XE2 Partner DVD (Зборник компонентов для XE2) volod3000 Софт 2 01.11.2011 02:26
Проект (работа с БД) на Delphi XE2 на Windows 7 64. Будет ли эта программа корректно работать на Windows 7 32 ? Dux Общие вопросы Delphi 10 04.10.2011 19:33
Узнать на сколько загружает процессор какая-то программа.. Человек_Борща Общие вопросы Delphi 7 19.09.2010 13:30