カテゴリー別アーカイブ: 未分類

DoctrineでFatal error: Allowed memory size of ???? bytes exhausted を回避する

PHPでDoctrineを多用するようになったら、メモリが足りないというエラーが頻発してきました。

Doctrineそのものが3MBほど使うのは仕方ないとしても、クエリやレコード追加する度に使用メモリが増えつづけるのはいただけない。

不要メモリ削除にチャレンジしてみました。
まずは、一番簡単な方法。

例)
$query = Doctrine_Query::create()
->from(‘SomeModel’)
->where(…);
$rs = $query->execute();

// 使用後に、ここで参照を止めてみる
$rs = null;
$query = null;

通常はスコープをなくせばいいはずなのに、どんどん使用メモリが増えていきます。

さらに調べると、Doctrine_Recordが生成される際、Doctrine_Table_Repositoryに自分を登録しているではありませんか・・・

Doctrine_Query、Doctrine_Collection、Doctrine_Recordにはfreeメソッドがありました。特にDoctrine_Collectionでは、freeメソッドの引数deepをtrueにすることで、子のDoctrine_Recordのリレーション先のfreeまでやってくれそうです。

例)
$query = Doctrine_Query::create()
->from(‘SomeModel’)
->where(…);
$rs = $query->execute();

// 使用後に、Repositoryから削除し、参照も止めてみる
$rs->free(true);
$rs = null;
$query->free();
$query = null;

これで使用メモリは増えなくなり、スッキリしました。

ちなみに、そもそもDoctrine_Table_Repositoryに登録しない設定はないのかとしらべましたが、そんなものはありませんでした。

若干面倒ですが、freeしてnullするしかなさそうです。

(nullは、スコープが外れれば同じことなので、よほどシビアでなければやらなくても良い)

android/XPERIAのおすすめアプリ10選

今のところ、XPERIAの動作はかなり快調です。

今まででおすすめできるアプリを列挙します。

もちろんすべて無料です。

順番は全く関係ありません。

1.Advanced Task Killer Free

常駐してしまったアプリをごっそり消してくれるアプリです。

XPERIAはメモリに余裕があるせいで、どんどんアプリがたまってしまいますが、これでスッキリします。

2.FoxNote

とても便利なメモ帳です。

とりあえずこれを入れておけば、打ち合わせに使えます。

3.fring

公式Skypeはマーケットから消されてしまいましたが、これがあればSkypeが使えます。しかもSkypeOutまで使えるので、大変重宝します。

海外渡航には必須。

4.Listen

Podcastをダウンロードして、再生できます。

世界中のPodcastを検索して再生できるので、音楽からニュースまでほぼ何でも手に入ります。

5.MSN Droid

MSNメッセンジャークライアントです。

中国ではQQですが、日本ではMSNメッセンジャーのユーザが多いので、この公式アプリは重要です。

6.My Docomo Checker

パケット通信料や通話料が一発で把握できます。

あらかじめMyDocomoの登録は必要ですが、絶対に登録して見た方がいいです。

テザリング調査の時も、従量料金が発生していないかチェックできますしね。

7.ドロイドあんてな

2chなどのBBS情報をまとめてくれるアプリです。

結構笑えるスレッドがあったりして、移動中に使えます。

8.ギューニュース

朝日新聞のニュースを見るのに便利なアプリです。

これも移動中に使うと便利です。

9.Twidroid

XPERIAにプリインストールされているtimescapeでもtwitterの更新はできるのですが、フォローしている相手の情報はリストで見えても、自分のつぶやきはリストになりません。

私はtwitterを日記として使っているので、ログを見るには不便です。

そこで、このアプリ。

twitterを使うのには一番なのではないでしょうか。

10.BBC News

イギリスBBCのニュースを聴くには、これが便利です。

文章と音声が同時に出るともっといいのですが・・・

AFNもアプリにして欲しいものです。