2

重複の可能性:
PHP(> = 5.0)では、参照による受け渡しが高速ですか?

参照によってパラメーターの受け渡しを宣言することにより、文字列を関数のローカルスコープにコピーする必要がないため、PHPインタープリターが高速になるのではないでしょうか。このスクリプトは、XMLファイルを何千ものレコードを持つCSVに変換するため、時間の最適化はほとんど重要ではありません。

これでしょうか:


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;
}

これより速くする:


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

4 に答える 4

8

考えないでください、プロフィール

たとえば、Unixtimeコマンドで、関数の各バージョンを100,000回繰り返し使用するスクリプトを実行します。何が速いかについて哲学しないでください。探し出す。

于 2009-07-23T15:34:52.983 に答える
1

私の推測では、これはほとんど目立たない最適化であり、将来的に予期しない副作用を引き起こす可能性があります。たとえば、次の人はおそらくescapeCSV自分のパラメータを変更することを期待しておらず、CSVされていない文字列であると考えて渡したパラメータを使用する可能性があります。

また、文字列はインプレースで編集されないため、関数で新しい文字列が作成されるケースがすでに2つあります(1つはstr_replace用、もう1つは前後の引用符の連結用)。値渡しの場合のもう1つは、アプリのボトルネックにはなりません。

于 2009-07-23T15:39:08.073 に答える
1

PHP参照はポインタではありません。それらは何もスピードアップしません-実際、シンボルテーブルに追加の内部エントリを必要とするため、逆になります。

于 2009-07-23T16:31:48.170 に答える
0

[...]時間の最適化はほとんど重要ではありません。

いいえ、ありません。

唯一の真の最適化は、コードの読み取りや書き込みを高速化するのに役立つ最適化です。パフォーマンスのために単純さや読みやすさを犠牲にしないでください。長期的には速度が低下します。

参照によって物事を渡すことは、特に誤解を招く可能性があります。後でいくつかの変数が不思議に変化するときに、奇妙な問題に遭遇する可能性があります。関数入力を変更しますが、これは通常の動作方法ではありません。あなたが何かをするたびに、あなたはそれらについて覚えていなければならない珍しい方法です。しかし、あなたの記憶と注意は限られています。コンピュータはそうではありません。過度に最適化しないでください。

デバッグは、そもそもコードを書くよりも2倍難しいです。したがって、コードを可能な限り巧妙に記述した場合、定義上、コードをデバッグするのに十分なほど賢くはありません。-ブライアン・W・カーニハン

アップデート

この場合、関数全体escapeCSVは少し無意味です。Cで記述されたコアPHPライブラリであるを使用する必要がfputcsvあります。したがって、はるかに高速でメモリ効率が高くなります。

于 2009-07-23T15:35:55.977 に答える