![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 наверное.
А проблема в алгоритме наверно.