C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Почему мой UDP сканер дико грузит комп?
DENIS452
Отправлено: 20.10.2006, 19:28


Ученик-кочегар

Группа: Участник
Сообщений: 3



Почему мой UDP "сканер" сильно грузит пороц? Кто шарит в UDP сокетах?

При первом запуске этой проги и начале сканирования мой проц AMD 64 3700+
грузится процентов на 70, притом сам процесс моей проги грузит только на 30%
остальное — системные процессы!

При повторном запуске сканирования, без перезапуска проги, процесс проги
потребляет уже 0% и системные процессы фактически тоже 0%!

Это все относится к сканированию одного сегмента из 254 айпишников,
когда же таких сегментов много, штук 25 (если изменить цикл сканирования)
то при повторных сканирования процесс моей проги потребляет уже не 0%
а в среднем 5%.

Вот скрин загрузок проца при двух сканированиях 25 сегментов


http://img220.imageshack.us/my.php?image=661ea7.jpg

очевидно что второе сканирование ещё и меньше времени занимает!

Эта прога написанна на Borland Developer Studio 2006 -> C++Builder
но у меня есть уже готовый релиз написанный на сокетах на C++ Builder 6
и там почти тоже самое наблюдается!

Кроме того если запустить прогу прям из BDS2006 то переодически вылазят
во время сканирования вылазят такие ошибки:

First chance exception at $7C81EB33. Exception class EIdSocketError with message 'Socket Error # 10054
Connection reset by peer.'. Process Project1.exe (3476)

Насчёт проги написанной на билдере 6 и не сокетах, я точно непомню, были там такие
ошибки или нет.

Отчего такое происходит?!! И как с этим бороться?

Например выделенный сервак 3D шутера работая с 32 клиентами в обе
стороны посылая по 100 пакетов в секунду каждому (и не 20 байт!)
грузит такой проц меньше 70%, а ведь пересылка пакетов это не самая главная
его задача!!!



CODE

//$$---- Form CPP ----
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char ip[20];
for(int i = 1; i < 255; i++)
{
sprintf(ip,"%s%d","10.10.110.",i);
Label1->Caption = ip;
IdUDPServer1->SendBuffer(ip,27015,"яяяяinfostring<!--POST BOX-->",15);  
::Sleep(5);
Application->ProcessMessages();
IdUDPServer1->SendBuffer(ip,27015,"яяяяTSource Engine Query<!--POST BOX-->",25);
::Sleep(5);
Application->ProcessMessages();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender, TStream *AData,
    TIdSocketHandle *ABinding)
{
char buff[300];
for(int i=0;i < AData->Size;i++)
{
AData->ReadBuffer(&buff[i],sizeof(buff[i]));
if (buff[i] == 0) {buff[i] = '@';}
}
buff[AData->Size] =  0;
Memo1->Lines->Add(buff);
Memo1->Lines->Add(ABinding->PeerIP);
Memo1->Lines->Add(ABinding->PeerPort);  
}
//---------------------------------------------------------------------------





Отредактировано DENIS452 — 21.10.2006, 13:29

Вернуться в Вопросы программирования в C++Builder