Ученик-кочегар
Группа: Участник
Сообщений: 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 |