perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 24
Click for quality!




11.02.2012 / 22:47

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragHohe CPU / Pattern
Seitenanfang
Hi ich habe folgendes Problem ich möchte eine Große datei Pattern (50 MB) und bekomme immer eine 100 %tige CPU auslastung was kann man da machen, Script ist für Windows.
Hier mein bisheriger Code:

#! /usr/bin/perl

# diese Pragmas sollten immer eingesetzt werden!
use strict; # siehe perldoc strict
use warnings;

my $input = 'test.dat';
my $output = 'test1222.dat';

my $pattern1 = "0";
my $ersatz1 = " ";
open(IN,"<$input") or die $!;
my @lines = <IN>;
close IN;

open(WRITE,">$output") or die $!;
foreach my $line(@lines){
$line =~ s/\Q$pattern1\E/$ersatz1/g;

print WRITE $line;
}
close WRITE;

Datum: 03.01.2006-20:48

Beitragre: Hohe CPU / Pattern
Seitenanfang
Hi,

ich glaube Dir nicht dass das Skript unter Windows läuft. Nicht mit dem Kompileraufruf. ;-)

Nebenbei, 50MB in den Speicher laden ist ganz schön heavy.


#! /usr/bin/perl

use strict;
use warnings;

my $input = 'test.dat';
my $output = 'test1222.dat';
my $pattern1 = "0";

open(IN,"<$input") or die $!;
open(WRITE,">$output") or die $!;
while(<IN>)
{
$_ =~ s/\Q$pattern1\E/\s/g;
print WRITE $line;
}
close IN;
close WRITE;

-uw

Datum: 03.01.2006-21:07

Beitragre: Hohe CPU / Pattern
Seitenanfang
Hi,
hast du recht ein leerzeichen zuviel und das $ersatz1 vergessen, gibt es denn sonst noch eine Möglichkeit so große dateien zu bearbeiten?

#!/usr/bin/perl

use strict;
use warnings;
my $input = "test.dat";
my $output = 'test1222.dat';

my $pattern1 = "0";
my $ersatz1 = " ";
open(IN,"<$input") or die $!;
my @lines = <IN>;
close IN;

open(WRITE,">$output") or die $!;
foreach my $line(@lines){
$line =~ s/\Q$pattern1\E/$ersatz1/g;

print WRITE $line;
}
close WRITE;


So sollte es sein ;)

Datum: 03.01.2006-21:13

Beitragre: Hohe CPU / Pattern
Seitenanfang
Hi,

$ersatz1 habe ich nicht vergessen. Das habe ich absichtlich weggelassen. Und dass ich die geöffnete Datei Zeilenweise verarbeitet habe, das hatte auch seinen Sinn. Theoretisch hätte ich sogar $pattern1 weglassen müssen.

50MB in den Speicher zu laden produziert CPU-Load. Und je mehr Variablen dazu kommen, um so höher wird die Last.

Du darfst nicht vergessen, dass das System die Bytes sequenziell durcharbeitet.

-uw

Datum: 03.01.2006-21:55

Beitragre: Hohe CPU / Pattern
Seitenanfang
Dadurch wird die CPU last auch nicht weniger, gibt es nicht die möglichkeit durch sleep oder Byteweise einlesen die Last zu reduzieren? Oder die date nach und nach einzulesen und zu pattern, falls ja wie könnte so etwa aussehen.

Datum: 03.01.2006-22:31

Beitragre: Hohe CPU / Pattern
Seitenanfang
Hallo cyber87,

Du kannst natürlich zeilenweises Einlesen und Auswerten versuchen:


open(IN,"<$input") or die $!;

open(WRITE,">$output") or die $!;
foreach my $line(<IN>){
$line =~ s/\Q$pattern1\E/$ersatz1/g;

print WRITE $line;
}
close WRITE;

close IN;

Ob's 'was bringt, weiss ich nicht. Ansonsten wäre es einmal interessant, Dein Script mit Deinen Daten auszuprobieren. Hast Du eine Möglichkeit, die irgendwo zum Download zu deponieren?

Was sagt denn Dein Taskmanager, welcher Prozeß die ganze CPU verbraucht?

Gruß, Michael

Datum: 05.01.2006-18:18

-






-
-