忍者ブログ
適当に調べたことを適当に書きます。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


<?php
class a {
public function __construct() {
//局所変数はメソッドが終わったらメモリが解放される
$var = str_repeat("1234567890", 1024);
//メンバ変数に10KBセット
$this->var1 = str_repeat("1234567890", 1024);
//メンバ変数に10KBセット
$this->var2 = str_repeat("1234567890", 1024);

//2行目(30KB+αが増えている)
echo memory_get_usage() . "\n";

//$this->var2の値を$this->var3に参照渡し
$this->var3 =& $this->var2;
//3行目(リファレンス渡しの為メモリ使用量が少ない)
echo memory_get_usage() . "\n";

//$this->var2の値を$this->var4にコピー
$this->var4 = $this->var2;
//4行目(コピーの場合はメモリが10KB増える)
echo memory_get_usage() . "\n";
}

public function set() {
$this->var1 .= str_repeat("1234567890", 1024);
}

public function sub() {
$this->var1 = str_repeat("1234567890", 1024);
}
}

//1行目 (メモリの初期値)
echo memory_get_usage() . "\n";

//5行目 (局所変数分のメモリが解放されている)
$a = new a;
echo memory_get_usage() . "\n";

//6行目 (増やした分だけ増える)
$a->set();
echo memory_get_usage() . "\n";

//7行目(減った分だけ解放する)
$a->sub();
echo memory_get_usage() . "\n";

//8行目($this->var1のメモリが解放される)
unset($a->var1);
echo memory_get_usage() . "\n";

//9行目(var3があるためメモリは解放されない)
unset($a->var2);
echo memory_get_usage() . "\n";

//10行目(参照元がなくなった為メモリが解放される)
unset($a->var3);
echo memory_get_usage() . "\n";


出力結果:

60216
91776
91840
102144
91472
101736
91496
81240
81240
70984
PR
最近ではmemcachedなどが持て囃されているが、共有メモリもなかなか扱いやすい。
memcachedと違うところはIDにstringではなくintが必要なところでしょうか。
また、cache_limitのような設定もない。

今回は共有メモリ関数、shmopを使って簡単なカウンターを作ってみた。

カウンタープログラム
カウンタークラス
カウンタークラス(ファイル版)

簡単にファイル版も作成して比べたところでは倍ほど早くなるようだ。
思ったよりは遅かった。

#当然メモリなのでどこかでファイル保存させる処理が必要になる。

tmpデータやsessionデータなど、上手く使えば高速で簡単な処理が可能になりそう?

ちなみにこのshmop系はデフォルトでは使えない。
コンフィギュアオプションを設定する必要がある。(PHP5.2.x)
PHPの連想配列は、順序リストを持つと言う特性があります。
ハッシュデータは順序について意識しないという言語が多いと思いますので、結構珍しいのです。

%a = ('A'=>1.'B'=>2);         //順番はわからない(perl)
$a  = array('A'=>1,'B'=>2);//左から順番に

なので、each関数などを使うと順序どおりに出てきます。
個人的にこの法則を使ったことはないですが、処理的にはライトウェイトになりそうな予感です。

--------------------------------------------------- 
$c=0;
 $fp = fopen("index.html","r");
 while($d = fgets($fp,1)){$c++;}
 fclose($fp);
--------------------------------------------------- 

--------------------------------------------------- 
$c = count(file('index.html'));
--------------------------------------------------- 

--------------------------------------------------- 
exec("wc -l index.html",$c);
--------------------------------------------------- 

どれが早い?




忍者ブログ [PR]
カレンダー
06 2025/07 08
S M T W T F S
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
フリーエリア
最新コメント
最新トラックバック
プロフィール
性別:
非公開
バーコード
ブログ内検索