Форум: "Начинающим";
Текущий архив: 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.01 c