Bir işleve referans bir dize geçirerek hızlandırmak istiyorsunuz?

4 Cevap php

Possible Duplicate:
In PHP (>= 5.0), is passing by reference faster?

I wonder if by declaring the parameter pass by reference, the PHP interpreter will be faster for not having to copy the string to the function's local scope? The script turns XML files into CSVs, which have thousands of records, so little time optimizations count.

Olur bu:


function escapeCSV( & $string )
{
    $string = str_replace( '"', '""', $string ); // escape every " with ""
    if( strpos( $string, ',' ) !== false )
    	$string = '"'.$string.'"'; // if a field has a comma, enclose it with dobule quotes
    return $string;
}

Bu daha hızlı ol:


function escapeCSV( $string )
{
    $string = str_replace( '"', '""', $string ); // escape every " with ""
    if( strpos( $string, ',' ) !== false )
    	$string = '"'.$string.'"'; // if a field has a comma, enclose it with dobule quotes
    return $string;
}

?

4 Cevap

Don't think, profile.

Unix time komutu, diyelim ki, altında 100.000 tekrarları için fonksiyonu her sürümünü kullanabilirsiniz çalıştırın komut. Hızlıdır ne felsefe etmeyin; öğrenmek.

Benim tahminim bu potansiyel yolda beklenmedik sideeffects yol açabilecek bir zor fark optimizasyon, olduğunu olurdu. Örneğin, sonraki adam muhtemelen escapeCSV onun parametreyi değiştirmek için beklemek olacak değil, ve o hala un-CSV'd dize olduğunu düşünerek geçti parametresini kullanabilirsiniz.

Dizeleri yerinde düzenlenemez beri Ayrıca, zaten yeni bir dize senin işlev oluşturulan iki olgu (str_replace için bir, ondan sonra önce tırnak Birleştirme için birini /) var. Pass-by-value durumda bir daha app darboğaz olacak değildir.

PHP references are not pointers. Onlar hiçbir şey hızlandırmak yok - onlar sembol tablosunda ek bir dahili girişi gerektiren bu yana Aslında onlar, aksini yapmak.

[...] Çok az zaman optimizasyonlar saymak.

No, they don't.

Tek gerçek optimizasyon YOU okumak ve / veya daha hızlı kod yazmak yardımcı biridir. Sen performans için basitliği ya da okunabilirliği feda olmamalıdır - bu uzun vadede sizi yavaşlatacaktır.

Referans şeyleri geçirerek özellikle yanıltıcı olabilir. Bazı var gizemli değişecek taktığınızda, garip sorunlarla karşılaşabilirsiniz. Eğer işler normal çalışmaz yol değildir fonksiyon girişi, değiştirme. Eğer şeyi onlar hakkında hatırlamak zorunda alışılmadık bir şekilde yapmak her zaman. Bellek ve dikkat olsa sınırlıdır. Bilgisayar ait değildir. Overoptimise etmeyin.

Hata ayıklama iki kat zor ilk etapta kod yazma gibidir. Eğer kadar akıllıca mümkün olduğunca kod yazmak, bu nedenle, sen, tanımı gereği, ayıklamak için yeterince akıllı değil. - Brian W. Kernighan

UPDATE

Bu durumda bütün fonksiyon escapeCSV biraz anlamsızdır. Böylece çok daha hızlı ve verimli hafıza tarafından, C ile yazılmış çekirdek PHP kütüphanesi olan, fputcsv kullanmalısınız.