Текущий архив: 2004.11.14;
Скачать: CL | DM;
Вниз
Демо сканирования сети, нужна помощь с тестированием... Найти похожие ветки
← →
Vlad Oshin © (2004-10-14 09:08) [40]сеть с доменом (2 домена, блин.. )
нашла 31 машинку, ну утро еще, пока чаи гоняют, видать
Сканирует рывками. Сразу находит 30% (1-2 сек), потом еще 30-40%(2-3 сек), и окончательно еще ~2 сек
← →
Rouse_ © (2004-10-14 09:27) [41]Тэкс, вот про CreateSuspended = false это да, это я маху дал :))
Показываю текущую проблему:type
TTestThread = class(TThread)
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Start: Cardinal;
S: TStringList;
begin
S := TStringList.Create;
try
Start := GetTickCount;
for I := 1 to 255 do
with TTestThread.Create(True) do
begin
S.Add(IntToStr(I) + ":" + IntToStr(GetTickCount - Start));
FreeOnTerminate := True;
Resume;
end;
finally
Memo1.Text := S.Text;
S.Free;
end;
end;
{ TTestThread }
procedure TTestThread.Execute;
begin
// inherited;
end;
Здесь как видно создаются пустые 255 потоков и засекается время между их созданием...
На одной машине этот код пробегает за 15мсек
а на моей рабочей примерно вот такие данные:1:16
...
100:672
...
255:1532
Первое число - номер создаваемого потока, второе - время прошедшее с момента старта процедуры...
Вот именно чего я никак не могу понять, отчего такие тормоза :)
← →
panov © (2004-10-14 10:09) [42]>Rouse_ © (14.10.04 09:27) [41]
А какая ОС?
← →
Rouse_ © (2004-10-14 10:21) [43]XP SP2 со всеми обновлениями
D7 SP1
← →
panov © (2004-10-14 10:33) [44]>Rouse_ © (14.10.04 10:21) [43]
мда...
На w2000prof у меня тратится 78мс на весь этот цикл...
← →
Rouse_ © (2004-10-14 10:34) [45]Во-во, я о чем и говорю, чудеса блин термоядерной рекуперации :((
← →
panov © (2004-10-14 10:38) [46]>Rouse_ © (14.10.04 10:34) [45]
т.е. на одной ОС, но на разных ПК картина отличается?
← →
Rouse_ © (2004-10-14 10:41) [47]Да, дома стоит тоже самое только Дельфи не пропатченное...
Запустил на второй рабочей машине с ХР SP1, D7 SP1 - тоже скорость низкая, полный цикл за 600-700 Мсек пробегает...
Компьютеры Р4-3.200
← →
panov © (2004-10-14 11:01) [48]>Rouse_ © (14.10.04 10:41) [47]
А попробуй CreateThread в цикле вызвать, т.е. создать потоки без использования VCL.
← →
Rouse_ © (2004-10-14 11:07) [49]Гы, ты не поверишь, тоже самое, один в один... :((
← →
panov © (2004-10-14 11:28) [50]>Rouse_ © (14.10.04 11:07) [49]
А если в консольном приложении?
program Project1;
{$APPTYPE CONSOLE}
uses
classes,windows,SysUtils;
type
TTest=class(TThread)
protected
procedure Execute;override;
end;
procedure TTest.Execute;
begin
end;
var
i: Integer;
Start: Cardinal;
begin
Start := GetTickCount;
for i := 0 to 255 do
begin
with TTest.Create(True) do
begin
FreeOnTerminate := True;
Resume;
WriteLn(IntToStr(I) + ":" + IntToStr(GetTickCount - Start));
end;
end;
ReadLn;
end.
И еще проверь, от Delphi зависит или нет - вот в D6 откомпилировано:
ftp://ftp.spb.gkbank.ru/download/Test/Project1.exe
← →
Rouse_ © (2004-10-14 12:23) [51]Консоль аналогично, сейчас солью, проверю...
← →
Rouse_ © (2004-10-14 12:33) [52]> [50] panov © (14.10.04 11:28)
Твой ЕХЕ влет отработал :(
← →
panov © (2004-10-14 13:05) [53]>Rouse_ © (14.10.04 12:33) [52]
По рассказам мастеров в D7 реализация потоков отличается от D6, а в D6 от более низких версий(у меня D7 нет).
← →
Verg © (2004-10-15 00:25) [54]
> Rouse_ © (14.10.04 09:27)
Да, ну допустим, измерение времени в данном случае нельзя назвать чистым - там ко времени подмешиваютя.
> S.Add(IntToStr(I) + ":" + IntToStr(GetTickCount - Start));
Операции IntToStr, строковое объединие ( 2 раза ) и операция Add в TStringList. В среднем - 6 мс на итерацию цикла. Сказать, что много? - а фиг его знает
А если так, то что напишет?procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Start: Cardinal;
S: TStringList;
begin
S := TStringList.Create;
try
Start := GetTickCount;
for I := 1 to 255 do
with TTestThread.Create(True) do
begin
FreeOnTerminate := True;
Resume;
end;
S.Add(IntToStr(GetTickCount - Start));
finally
Memo1.Text := S.Text;
S.Free;
end;
end;
← →
Erik1 © (2004-10-15 10:51) [55]А почему бы ненаписать
TTestThread.Create(Prefix + IntToStr(I));
А в конструкторе
Create(Value: String);
IP := inet_addr(PChar(Value));
FreeOnTerminate := True;
inherited Create(False);
Попробуй может поможет, а еще лучше скомпилировать все под D5. А спотрел реализацию TThread под D6 мне очень непонравилось.
← →
Rouse_ © (2004-10-15 10:55) [56]> [54] Verg © (15.10.04 00:25)
Так пишет общее время в районе 1300Мсек
Да тут что-то по всей видимости с Дельфи, потомучто уж если деже через CreateThread тормозит, то я теряюсь...
Вот пример Панова который он у себя собрал - отработал как нужно. т.е. быстро, но этот же код собранный у меня - медленно...
В чем может быть проблема, даже ума не приложу...
> [55] Erik1 © (15.10.04 10:51)
Пробовал такой вариант, тоже самое...
← →
panov © (2004-10-15 12:36) [57]>Rouse_ © (15.10.04 10:55) [56]
Моарль - D6 лучше, чем D7, а D5 лучше, чем D6.
А всех лучше - D3. (это так - самохоливарчик)
← →
Rouse_ © (2004-10-15 12:58) [58]> [57] panov © (15.10.04 12:36)
А паскаль всему голова ;)
← →
Aldor © (2004-10-22 15:56) [59]Позволю себе поднять ветку:
как версия компилятора может влиять на скорость вызова CreateThread??!
← →
Anatoly Podgoretsky © (2004-10-22 16:16) [60]panov © (15.10.04 12:36) [57]
Никакого холивара, так и есть, единственно возможности разные.
← →
Rouse_ © (2004-10-22 16:57) [61]> [59] Aldor © (22.10.04 15:56)
Версия дельфи ни при чем.
На обоих компьютерах она стоит одинаковая (специально дома сделал систему один в один с рабочим компьютером, включая OS и SP).
И всеравно наблюдается такой глюк с подтормаживанием на рабочем компьютере...
← →
Aldor © (2004-10-22 20:17) [62]Так я не понял, Вы нашли причину того, что откомпилированная у Панова программа работает быстрее на Вашей машине ([52])?
← →
имя (2004-10-22 21:25) [63]Удалено модератором
← →
Rouse_ © (2004-10-22 21:26) [64]> [62] Aldor © (22.10.04 20:17)
Нет, к сожалению не нашли...
Вчера общался с Юрием Зотовым, он предположил кое что, но предположение к сожалению оказалось неверным...
Теперь я совсем потерялся, решение не найдено и никто не может объяснить причину...
Хорошо что хоть в практике не приходится создавать так много потоков в цикле...
← →
wisekaa © (2004-10-22 23:00) [65]
> Rouse_
А что по железу, машины тоже одинаковые?
Мне на ум больше пока ничего не пришло.
← →
jack128 © (2004-10-22 23:04) [66]А у тя случайно не 16 цветов на мониторе?? :-))) А то я сегодня узнал, что программы, написанные на D5 не запускаются, если в настройках экрана выставлено 16 цветов...
← →
Rouse_ © (2004-10-22 23:26) [67]> [65] wisekaa © (22.10.04 23:00)
По железу почти один в один, если не брать харды то на нормальной машине (на которой все норм) проц 3.0 в отлицие от 3.2 на глючной рабочей
Память по гектару оба
Мать один в один
Видюха 5.600 против 5.200 на глючной (но не думаешь же ты что потоки от видео тормозят(ведь на второй рабочей тоже проверяли, и тоже тупит) ;)
> [66] jack128 © (22.10.04 23:04)
Ну и конечно, не 16 цветов :)
← →
wisekaa © (2004-10-23 00:02) [68]
> jack128 © (22.10.04 23:04) [66]
Вроде это только при использовании BDE.
> Rouse_ © (22.10.04 23:26) [67]
Нет не в видухе, я думал тормозят процы с мамками (бывают не удачные сочетани по производительности).
Харды - даже не знаю, насколько я понимаю, почти вся работа виндов с памятью все равно проходит через своп файл, но что-бы так зависеть от этого врядли.
А сетевухи? У меня на работе была глючная сетевуха, её коротнуло как-то в грозу, так работала ничего, но иногда глючила.
← →
jack128 © (2004-10-23 00:23) [69]wisekaa © (23.10.04 0:02) [68]
Вроде это только при использовании BDE.
использую IBX. Да и сам инсталятор Дельфи при попытке запуститься тоже виснет.
зы А как BDE связана с видео режимом??
← →
Rouse_ © (2004-10-23 00:24) [70]Ну блин...
А как создание потока с сетевухой то связано? ;)
← →
esu (2004-10-23 01:28) [71]сетка 192.168.1/24
вижу только себя (в домене)
← →
Rouse_ © (2004-10-23 01:34) [72]> [71] esu (23.10.04 01:28)
Вход в домен произведен? ...
← →
esu (2004-10-23 01:40) [73]Rouse_ © (23.10.04 01:34) [72]
Да. Это win2kserver, контроллер домена. ДНС соответственно localhost. Но сканирует относительно быстро (жаль что неверно :)
← →
esu (2004-10-23 01:46) [74]2. выключен NBT (NetBIOS Over TCP/IP)
3. NetBEUI вообще отсутствует как класс
← →
Rouse_ © (2004-10-23 01:47) [75]> ДНС соответственно localhost
Собственно это демо опирается именно на сетевое имя, так что...
← →
wisekaa © (2004-10-23 02:32) [76]
> Rouse_ © (23.10.04 00:24) [70]
Не с сетевухой создание не связано, это я про время отклика.
> jack128 © (23.10.04 00:23) [69]
BDE Adminnistrator требует такую цвет. гамму, думаю для работы с картинками в блобах, так что не исключаю такое требование и от других драйверов БД.
← →
Aldor © (2004-10-23 09:37) [77]В D6 и в D7 с разной скоростью срабатывает именно строчка
call CreateThread
или что-то еще?
← →
Rouse_ © (2004-10-23 13:34) [78]> [77] Aldor © (23.10.04 09:37)
нет.
Есть 2 абсолютно идентичных компа.
На обоих стоит семерка с первым сервиспаком.
На одном нормально идет создание потока, на другом сильно тормозит...
Страницы: 1 2 вся ветка
Текущий архив: 2004.11.14;
Скачать: CL | DM;
Память: 0.63 MB
Время: 0.113 c