Thread Schleifengeschwindigkeit (20 answers)
Opened by RPerl at 2009-05-30 17:02

sid burn
 2009-05-31 02:22
#122127 #122127
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Ein Mammut anteil liegt immer noch an Math::BigInt und nicht an der Objektinitialisierung.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use Net::IP;

for ( 1 .. 200 ) {
    my $ip = new Net::IP('217.229.0.134 - 217.229.0.150') or die;
    my @ips = ();

    while ($ip) {
        push @ips, $ip->ip();
        ++$ip;
    }
}


Code: (dl )
1
2
3
4
5
sidburn@sid:~/perl/netip$ time ./ip.pl 

real 0m10.209s
user 0m10.201s
sys 0m0.000s


Nach diesen änderungen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
sidburn@sid:~/perl510$ git diff
diff --git a/lib/site_perl/5.10.0/Net/IP.pm b/lib/site_perl/5.10.0/Net/IP.pm
index eec2023..26f13b4 100644
--- a/lib/site_perl/5.10.0/Net/IP.pm
+++ b/lib/site_perl/5.10.0/Net/IP.pm
@@ -40,7 +40,7 @@
package Net::IP;

use strict;
-use Math::BigInt;
+#use Math::BigInt;

# Global Variables definition
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $ERROR $ERRNO
@@ -388,7 +388,7 @@ sub binmask {
sub size {
my $self = shift;

- my $size = new Math::BigInt($self->last_int);
+ my $size = $self->last_int; #new Math::BigInt($self->last_int);
$size->badd(1);

$size->bsub($self->intip);
@@ -888,7 +888,7 @@ sub ip_bintoint {
my $binip = shift;

# $n is the increment, $dec is the returned value
- my ($n, $dec) = (Math::BigInt->new(1), Math::BigInt->new(0));
+ my ($n, $dec) = (1, 0); #Math::BigInt->new(1), Math::BigInt->new(0));


# Reverse the bit string
@@ -913,7 +913,7 @@ sub ip_bintoint {
# Returns : bit string
sub ip_inttobin {

- my $dec = Math::BigInt->new(shift);
+ my $dec = shift; #Math::BigInt->new(shift);

# Find IP version
my $ip_version = shift;
@@ -924,7 +924,7 @@ sub ip_inttobin {
return;
}

- my $binip = $dec->as_bin();
+ my $binip = sprintf '%b', $dec; #$dec->as_bin();
$binip =~ s/^0b//;

# Define normal size for address


Code: (dl )
1
2
3
4
5
sidburn@sid:~/perl/netip$ time ./ip.pl 

real 0m1.770s
user 0m1.768s
sys 0m0.000s


Stellt sich nur die Frage ob Math::BigInt von Net::IP benötigt wird. Da es auch IPv6 können soll, wahrscheinlich ja.

Zumindest laufen die Tests nach diesen änderungen immer noch erfolgreich durch. Aber bei nur 48 tests fpr IPv4 und IPv6 stellt sich die Frage ob diese überhaupt aussagekräftig genug sind.
Last edited: 2009-05-31 02:38:45 +0200 (CEST)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Schleifengeschwindigkeit