2012-02-09 15 views
0

私はメモリ使用量に関して非常に効率的である必要がある何かに取り組んでいます、そして、私は誰かがここで知っていることを期待していました...配列にデータを格納するのは効率的ですか?他の方法で?各文字列は整数を参照します。配列を作成する最も効率的な方法は? Int =>配列文字列または文字列=>配列整数?

例としては、サッカーチームのジャージーナンバーが格納されています...ジャージーナンバー1から20、およそ200の異なるサッカーチームがあります - 各サッカーチームにはジャージー番号1から20があり、各ジャージー番号は各フットボールチームでそれは次のようにこのデータを格納する方が良いでしょう:

JerseyNumber(Int)=>array(team, team, team, etc.) 

または

TeamName(String)=>array(1,2,3,4,etc.) 

それが違いを生むのか?どちらの方法でも、データはキャッシュに保存されるため、CPU使用量の問題ではありません。メモリ使用量の問題です。

私はテストデータを生成するために使用しているコードを含んでいます...私はmemory_get_usage()を使用しようとしていました(前後に違いがあります)が、正確に取得する方法がわかりませんこのように配列の実際のメモリ使用量。

$ids = array(); 
for ($i = 0; $i < 500; $i++) { 
    $ids[] = $i; 
} 

$tmpArray = array(); 
$values = array(); 
for ($i = 0; $i < 60; $i++) { 
    $randString = randString(rand(60,100)); 
    $values[] = $randString; 
} 


foreach ($values as $feValues) { 
    $tmpArray[$feValues] = $ids; 
} 

$tmpArrayTwo = array(); 
foreach ($ids as $feIds) { 
    $tmpArrayTwo[$feIds] = $values; 
} 
+1

オブジェクトを構築する前と後でmemory_get_usage()を呼び出すと、メモリ消費が得られているはずです。そのアプローチには何が間違っていたのですか? – rubayeet

+0

@rubayeet foreachを使って配列を生成していますが、正確なメモリの使用法を提供できません。 – Jon

+0

一般的な経験則では、intは文字列よりも効率的なストレージですが、実際にmemory_get_usageまたはデバッグモジュールでメモリ使用量をテストすることなく、情報に基づいた判断をすることはできません。 – GordonM

答えて

1

違いがありますか?どちらの方法でも、データはキャッシュに保存されるため、CPU使用量の問題ではありません。メモリ使用量の問題です。

実質的に、 PHPストレージエンジンは非常に複雑で、このレベルはノイズに含まれているため、この内部を簡単に調べることはできません。大規模な複雑な構造の場合でも、PHPは参照ベースのコピーオンライトを使用するため、ストレージの使用状況を追跡することは困難です。 Thisポストの一種は、あなたがボンネットの下で起こっていることを暗示するようになります。 :-)

関連する問題