Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> duzy plik i wydajnosc
ActivePlayer
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


Mam plik: http://www.kurnik.pl/slownik/ wersja pod windowsa, po rozpakowaniu ~~35 mb, przekonwertowana do ascii.

i teraz:
  1. <?php
  2. $wyrazy = file('slowa-win.txt');
  3. foreach($wyrazy as $id => $val){
  4. $len = strlen($val);
  5. if($len<4 and $len>5){
  6. unset($wyrazy[$id]);
  7. }
  8. }
  9. shuffle($wyrazy);
  10. fwrite(fopen('slowa.txt', 'w'), implode("n", array_slice($wyrazy,0,750)));
  11. ?>


komentując 2 ostatnie linijki, skrypt uruchamia sie jakies 3 minuty... i jest okey... ale wywołując razem, 30 minut to mało... to nei jest kwestia slabego sprzetu.
Go to the top of the page
+Quote Post
strife
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Może podziel ten plik na kilka mniejszych. Albo wczytuj plik porcjami... może to coś zmieni.

Pozdro!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Nie lepiej tego najpierw do bazy wrzucic?

  1. <?php
  2. fwrite(fopen('slowa.txt', 'w'), implode("n", array_slice($wyrazy,0,750)));
  3. ?>

Pewnie implode powoli dziala.
Nie lepiej zapisywac po linijce: foreach ( $slice )...?

PS.
  1. <?php
  2. if($len<4 and $len>5){
  3. unset($wyrazy[$id]);
  4. } 
  5. ?>

kiedy ten warunek bedzie prawdziwy?
Go to the top of the page
+Quote Post
Vengeance
post
Post #4





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


użyj file_get_contents() a nie file()
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


W tym pliku sa slowa -- kazde w osobnej linijce, wiec
Cytat
użyj file_get_contents() a nie file()

Nic mu nie pomoze.

  1. <?php
  2. implode("n", array_slice($wyrazy,0,750)
  3. ?>

Niepotrzebnie dodajesz "\n" -- file() ich nie ucina.

moj kod:
  1. <?php
  2. $times = array();
  3. $times[] = array( '---', microtime( TRUE ) );
  4.  
  5. $in = 'slowa-utf8';//plik ze slowami (32 MB)
  6. $out = 'slowa-out'; // wynik
  7.  
  8. $lines = file( $in );
  9. $times[] = array( 'file', microtime( TRUE ) );
  10.  
  11. $slice = array_rand( $lines, 750 ); // przeciez tak mozna (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)  zamiast shuffle i slice
  12. $times[] = array( 'shuffle'n'slice', microtime( TRUE ) );
  13.  
  14.  
  15. $outputFile = fopen( $out, 'w' );
  16.  
  17. foreach( $slice as $line )
  18. {
  19.     fwrite( $outputFile, $line );
  20. }
  21. fclose( $outputFile );
  22. $times[] = array( 'write', microtime( TRUE ) );
  23.  
  24.  
  25. for ( $i = 1; $i < count( $times ); $i++ )
  26. {
  27.     print( number_format( $times[ $i ][ 1 ] - $times[ $i - 1 ][ 1 ], 5 ) . ' / ' . $times[ $i ][ 0 ] . '<br />' );
  28. }
  29.  
  30. ?>


Wyniki na moim mega sprzeciochu (2xP3-500 + 512 MB + HDD ~ 25MB/s)

Kod
23.82346 / file
1.81372 / shuffle'n'slice
0.14638 / write

LOL?
a apache uzyl 60% pamieci (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) , ActivePlayer ile masz RAMu? moze system zaczal ci swapowac za bardzo.


----
edit: jednak implode nie ma tu nic do rzeczy -- 0.723s z implode, 0.17.. z petla i fwrite.

Ten post edytował dr_bonzo 11.11.2005, 17:47:29
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


sempron 3k++ (1,8gzh) 512 ramu

zrobilem tak:
1. wlaczylem skrypt
2.poszedlem
3.przyszedlem
4. jest

ale nie mam pojecia dlaczego tak dlugo sie to robilo. moglem jakiegos timera włączyc, ale w sumie. jednorazowa operacja, wiec nie ma co analizowac. zastanawia mnie tylko... taaa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
  1. <?php
  2. if($len<4 and $len>5){
  3. unset($wyrazy[$id]);
  4. } 
  5. ?>


to juz wiem dlaczego tak dlugo (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) kurde... chyba odpuszcze z tymi dlugosciami... mialo byc or w tym warunku (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
jono
post
Post #7





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Kiedyś stworzyłem skrypt sprawdzający pisownię. Chyba jedynym logicznym wyjściem jest podzielenie bazy słów na pliki a.txt, b.txt zawierające wyrazy które zaczynają się na daną literę. Działa szybko, a nawet dodałem do skryptu podpowiedzi jakie wyrazy można by uzyć. Jedyną wadą takiego rozwiązania jest to, że skrypt wariuje, kiedy błąd znajdzie się w pierwszej literze...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:09