Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code/Schleife extrem langsam (https://www.delphipraxis.net/135610-code-schleife-extrem-langsam.html)

wth 14. Jun 2009 18:44


Code/Schleife extrem langsam
 
Hi,

Ich habe mir folgenden Code gebastelt, um eine Reihe von IP-Adressen zu generieren.
Es funktioniert, aber die Schleife läuft extrem langsam.
z.B die Generierung von 127.0.0.1 - 127.0.0.254 dauert einige Sekunden!

Woran könnte das liegen?

Delphi-Quellcode:
var
  I: Integer;
begin
  for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
    listbox1.items.Add(string(inet_ntoa(TInAddr(htonl(I)))));
end;

hoika 14. Jun 2009 18:51

Re: Code/Schleife extrem langsam
 
Hallo,

das kannst du ohne Profiler auch selbst heraus bekommen


Original:
Delphi-Quellcode:
for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
    listbox1.items.Add(string(inet_ntoa(TInAddr(htonl(I)))));

ListBox-Problem ?
Delphi-Quellcode:
for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
begin
end;
inet_ntoa-Problem ?
Delphi-Quellcode:
for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
begin
  listbox1.items.Add('1'(;
end;

usw.



Heiko

Namenloser 14. Jun 2009 18:53

Re: Code/Schleife extrem langsam
 
Delphi-Quellcode:
var
  I: Integer;
begin

  listbox1.Items.BeginUpdate;

  for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
    listbox1.items.Add(string(inet_ntoa(TInAddr(htonl(I)))));

  listbox1.Items.EndUpdate;
end;

omata 14. Jun 2009 18:54

Re: Code/Schleife extrem langsam
 
Versuch doch mal folgendes...
Delphi-Quellcode:
var
  I: Integer;
begin
  ListBox1.Items.BeginUpdate;
  try
    for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
             ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
    begin
      ListBox1.Items.Append(string(inet_ntoa(TInAddr(htonl(I)))));
    end;
  finally
    ListBox1.Items.EndUpdate;
  end;
end;

mkinzler 14. Jun 2009 18:54

Re: Code/Schleife extrem langsam
 
Zitat:

Zitat von NamenLozer
Delphi-Quellcode:
var
  I: Integer;
begin

  listbox1.Items.BeginUpdate;

  for I := ntohl(inet_addr(PAnsiChar(AnsiString(edit1.text)))) to
           ntohl(inet_addr(PAnsiChar(AnsiString(edit2.text)))) do
    listbox1.items.Add(string(inet_ntoa(TInAddr(htonl(I)))));

  listbox1.Items.EndUpdate;
end;

Wäre die Lösung wenn die ListBox die Performancebremse ist

wth 14. Jun 2009 19:01

Re: Code/Schleife extrem langsam
 
Hallo und danke für die Antworten.

Ich habe nun herausgefunden, dass es definitiv am inet_ntoa() liegt.
Begin/EndUpdate bringt erst etwas bei sehr vielen Einträgen, aber der Code braucht ja schon für gerade mal 254 IPs einige Sekunden.

Da stimmt doch was nicht. Läuft die Schleife bei euch denn auch so langsam? evtl. liegts ja an meinem PC.

mkinzler 14. Jun 2009 19:03

Re: Code/Schleife extrem langsam
 
Versuch es mal mit 4 Schleifen ( pro IP-Gruppe)

wth 14. Jun 2009 19:06

Re: Code/Schleife extrem langsam
 
Zitat:

Zitat von mkinzler
Versuch es mal mit 4 Schleifen ( pro IP-Gruppe)

So würde es natürlich gehen, aber ich würde es gerne mit den winsock Funktionen machen, damit ich mich um die Zerlegung der IPs nicht mehr kümmern brauche. :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz