Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

V chem mozhet byt problema? (100% CPU Load)   Найти похожие ветки 

 
pushkin42 ©   (2006-04-19 13:27) [0]

Napisal progu. Posle ee ispolzovanija na4inaetsja totalnyj zagruz processora (ispolzuet ku4u tajmerov i failovyu sistemu po seti).

Kto-nibud gotov pomo4? Ishodniki po email.

Zaranee spasibo.


 
balepa ©   (2006-04-19 13:45) [1]

Че русские буквы с клавы стерлись ?
Так после или в процессе использования  (100% загрузка)?
Как это использует файловую систему по сети?
Кучу таймеров это скока ?
А исходники 100Mb наверное.

А проблема в алгоритме наверно.


 
pushkin42 ©   (2006-04-19 15:11) [2]

Ne pajasnichaj, Musya!

4erez 15 minut
setevye faily
18
33,4 mbytes

a nashet poslednego sobstvenno poetomu ya suda i polez...


 
ЮЮ ©   (2006-04-20 03:52) [3]

>4erez 15 minut

значит собственно работа закончилась и работает пустой цикл.
Такой обработчик таймера занимает 100% CPU:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 repeat
   Application.ProcessMessages;
 until false
end;

а вот такой - 0%

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled := false;
 try

   repeat
     sleep(10);
     Application.ProcessMessages;
   until false;
 finally
   Timer1.Enabled := true;
 end
;

end;


 
pushkin42 ©   (2006-04-20 08:51) [4]

ЮЮ, у меня нет таймеров, где присутствует Application.ProcessMessages.


 
ЮЮ ©   (2006-04-20 09:23) [5]

Главное здесь не ProcessMessages, а отсутствие sleep(10)

Но у тебя есть 18 таймеров, очевидно, с небольшим интервалом, котрые постоянно вызываются, но ничего не делают, т.е. программа непрерывно крутится, на все 100%. Поставь хотя бы   sleep(10), если нечего делать в таймере, ди и интервал таймера можно увеличивать динамически.

П.С. На кой вообще их 18-ть. Всё-равно код только одного из них может выполняться, а остальные ждут своей очереди. Неужели важно чтобы код выполнялся в случайной, по сути, последовательности.


 
pushkin42 ©   (2006-04-20 12:07) [6]

ЮЮ, да нет конечно... я, кстати, думал, что таймеры выполняются с теми интервалами, какие были заданы... у меня в данном случае есть 2 таймера по 1 секунде а остальные по 10мс (таймеры запроса данных).

Что можно сделать для уменьшения тормозов?

И вот ещё:


if (cmbDataVer.ItemIndex=1) then begin
   if (odExcel.Execute) then begin
     F := odExcel.Filename;
     if (not (FileExists(F))) then goto n;

     AssignFile(Text, F);
     try
       Reset(Text);
     except
       Showmessage("Âûáðàííûé ôàéë çàíÿò äðóãîé ïðîãðàììîé!");
       Exit;
     end;
     AssignFile(Datafile, FN_DATABASE+".imp");
     Rewrite(Datafile);
     while not eof(Text) do begin
     // reading data...
       ReadLn(Text, Tmp);
       Tmp := Trim(Tmp);
//        showmessage(tmp);
       Excel.Name :=
       StringReplace(
       StringReplace(Explode(Tmp, ";", 1), "~", ";", [rfReplaceAll]),
       """, "", [rfReplaceAll]);
//        if (Name="") then Continue;
       Excel.Category := StringReplace(Explode(Tmp, ";", 2), "~", ";", [rfReplaceAll]);
       Excel.RukovodName := StringReplace(Explode(Tmp, ";", 3), "~", ";", [rfReplaceAll]);
       Excel.Region:= StringReplace(Explode(Tmp, ";", 4), "~", ";", [rfReplaceAll]);
       Excel.AdressCity := StringReplace(Explode(Tmp, ";", 5), "~", ";", [rfReplaceAll]);
       Excel.AdressStreet := StringReplace(Explode(Tmp, ";", 6), "~", ";", [rfReplaceAll]);
       Excel.AdressIndex := StringReplace(Explode(Tmp, ";", 7), "~", ";", [rfReplaceAll]);
       Ph :=StringReplace(Explode(Tmp, ";", 8), "~", ";", [rfReplaceAll]);//òåë-íû
       Oh := Ph;
       for J := 1 to AnsiPos(")", Ph) do Ph[J] := #32;
       Ph := Trim(Ph);
       Ph := "Testdata";//SelectPrimaryPhone(CharCount(Ph, ","), Ph, Excel.Name);
       Excel.OfficePhoneN := Ph;
       Excel.ExtPhones :=  Oh;

       if (StringReplace(Explode(Tmp, ";", 9), "~", ";", [rfReplaceAll])="Äà") then
         Excel.Prozvon := psPM else Excel.Prozvon := psNeprozvoneno;

       Excel.Vozrast := tsNew;
       Excel.Email := StringReplace(Explode(Tmp, ";", 9), "~", ";", [rfReplaceAll]);
       Excel.WWW := StringReplace(Explode(Tmp, ";", 10), "~", ";", [rfReplaceAll]);
       Write(Datafile, Excel);
       Imp := Imp + 1;
//        showmessage(inttostr(filesize(text)));
     end;
     CloseFile(Text);
     CloseFile(Datafile);
     CloseFile(Database);

     Reset(Database);
     Reset(Datafile);
     Seek(Database, FileSize(Database));
     Read(Datafile, Excel);
     Write(Database, Excel);
     CloseFile(Datafile);
     CloseFile(Database);

     DeleteFile(PAnsiChar(FN_DATABASE+".imp"));


тута не выполняется переход на CloseFile(Text), почему - тоже не понятно.


 
ЮЮ ©   (2006-04-21 03:40) [7]

>тута не выполняется переход на CloseFile(Text), почему - тоже не понятно
А с отладчиком пройти не судьба?


try
 Reset(Text);
except
 Showmessage("Âûáðàííûé ôàéë çàíÿò äðóãîé ïðîãðàììîé!");
 Exit;  <-  Один из случаев когда не выполнится
end;


Для безусловного выполнения кода следует применять конструкцию

AssignFile(Text, F);
try
 ...
finally
 CloseFile(Text);
 // этот код выполнится в любом (за исключением Halt, наверное) случае
end;



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
1-1143466199
DelphiLexx
2006-03-27 17:29
2006.05.07
Не работает DoubleBuffered при включенной тема Windows XP


4-1139768906
zaN0za
2006-02-12 21:28
2006.05.07
Реестр Windows


4-1139755805
psa247
2006-02-12 17:50
2006.05.07
CBT_HOOK !


2-1145271172
scamp_
2006-04-17 14:52
2006.05.07
про графы


15-1144829483
boriskb
2006-04-12 12:11
2006.05.07
Как вам американский "Солярис"?