Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.137 c
3-1142584000
de_ICER-T44
2006-03-17 11:26
2006.05.07
dbf Excel требуется грамотный ответ


1-1142340852
Sergg
2006-03-14 15:54
2006.05.07
Как разукрасить ветки из TTreeView


3-1141142692
[AleX]
2006-02-28 19:04
2006.05.07
Delphi+Access


4-1139606426
Nostradamus
2006-02-11 00:20
2006.05.07
Выбор пункта Popup меню


2-1145512235
wowik_cn
2006-04-20 09:50
2006.05.07
TabbedNotebook - активная вкладка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский