Thread Spreadsheet::WriteExcel Spreadsheet::ParseExcel: Resourcenverwendung?
(21 answers)
Opened by GoodFella at 2007-04-04 02:24
Es bleibt mir ja nur der Umstieg auf Win32::OLE, also habe ich mal einen Geschwindigkeitstest gemacht:
Code (perl): (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 #!/usr/bin/perl use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; my $xl = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); $xl->{'Visible'} = 0; $xl->{'DisplayAlerts'} = 0; my $book = $xl->Workbooks->Open('c:\test.xls'); my $sheet = $book->Worksheets(1); my $last_row = $sheet->UsedRange->Find( { What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows } )->{Row}; print "Start Speed Test..\n"; my $current_time = time; my $time_start = $current_time; foreach my $y (1..$last_row) { foreach my $x ('a'..'j') { my $bla = $sheet->Range($x.$y)->{Value}; } if ((time - $current_time) >= 1) { $current_time = time; my $speed = sprintf("%.2f", ($y / ($current_time - $time_start))); print "$speed Zeilen pro Sekunde\n" unless (($current_time - $time_start) == 0); } } $xl->Workbooks->Quit(); $xl->destroy(); Ergebnis: Die Geschwindigkeit pendelt sich bei ~90 Zeilen pro Sekunde ein. Das finde ich komisch, denn mit Spreadsheet::ParseExcel bekomme ich ~150 Zeilen pro Sekunde und wenn ich mir so manche VBA-Makros anschaue, dann sind die EXTREM viel schneller, obwohl Win32::OLE Excel ja genau wie VBA direkt benutzt... Vielleicht ist da irgendein Engpass in meinem Code, den ich übersehen habe? Nach DProf sieht es so aus, als wäre es wohl doch Win32::OLE -> Code: (dl
)
1 %Time ExclSec CumulS #Calls sec/call Csec/c Name ..hätte eigentlich erwartet, dass das mit Win32::OLE schneller ist. |