Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

V chem mozhet byt' problema? (100% CPU Load) [D7, WinXP]


pushkin42 ©   (2006-04-19 13:27:00) 

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.


ЮЮ   (2006-04-21 03:40:00) [1]

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


try
 Reset(Text);
except
 Showmessage('Âûáðàííûé ôàéë çàíÿò äðóãîé ïðîãðàììîé!');
 Exit;  


pushkin42   (2006-04-20 12:07:00) [2]

ЮЮ, да нет конечно... я, кстати, думал, что таймеры выполняются с теми интервалами, какие были заданы... у меня в данном случае есть 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-20 09:23:00) [3]

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

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

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


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

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


ЮЮ   (2006-04-20 03:52:00) [5]

>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-19 15:11:00) [6]

Ne pajasnichaj, Musya!

4erez 15 minut
setevye faily
18
33,4 mbytes

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


balepa   (2006-04-19 13:45:00) [7]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо