2012-04-18 13 views
2

私は多くのファイルからデータをインポートするためにsymfony 1.4(タスクから)とDoctrine 1.2を使用します。Doctrineで許容されるメモリサイズ

それはうまく動作しますが、数分後に私はいない私のコードではなく、教義で、PHPから致命的なエラー「メモリサイズ疲れを許可」を取得...

Call Stack: 
    0.0004  325216 1. {main}() C:\wamp\www\XPower\symfony:0 
    0.0125  587704 2. include('C:\wamp\www\XPower\lib\vendor\symfony\lib\command\cli.php') C:\wamp\www\XPower\symfony:14 
    1.9202 6981872 3. sfSymfonyCommandApplication->run() C:\wamp\www\XPower\lib\vendor\symfony\lib\command\cli.php:20 
    1.9233 6983528 4. sfTask->runFromCLI() C:\wamp\www\XPower\lib\vendor\symfony\lib\command\sfSymfonyCommandApplication.class.php:76 
    1.9234 6983688 5. sfBaseTask->doRun() C:\wamp\www\XPower\lib\vendor\symfony\lib\task\sfTask.class.php:97 
    3.0794 7047088 6. dataImportTask->execute() C:\wamp\www\XPower\lib\vendor\symfony\lib\task\sfBaseTask.class.php:68 
    3.2731 8663752 7. dataImportTask->traiterDossier() C:\wamp\www\XPower\lib\task\dataImportTask.class.php:36 
    7.7762 17906824 8. dataImportTask->traiterDossier() C:\wamp\www\XPower\lib\task\dataImportTask.class.php:55 
    264.4390 133557080 9. xPower::importerXml() C:\wamp\www\XPower\lib\task\dataImportTask.class.php:64 
    264.5919 133609328 10. xPower::importerFichierXml() C:\wamp\www\XPower\lib\XPower.class.php:312 
    265.4313 134048568 11. InverterTable->findOneBySerialNumber() C:\wamp\www\XPower\lib\XPower.class.php:445 
    265.4313 134048776 12. Doctrine_Table->__call() C:\wamp\www\XPower\lib\XPower.class.php:445 

i「は、いくつかの追加しようとしました - > free() "をDoctrine呼び出しに追加しましたが、今では" magic "DoctrineメソッドであるInverterTable->findOneBySerialNumber()で失敗するようです。

問題を解決するにはどうすればよいですか?自分自身の "findOneBySerialNumber"メソッドを記述し、 "free()"への呼び出しを追加する必要がありますか?

答えて

4

ドクトリンにはよくある問題です。 pcntl_forkを使用する必要があります。

私は例として常にthis gistを使用します。

pcntl_forkは、POSIX標準に準拠するOSが必要なため、Windowsでは動作しません。

教義のないオブジェクトのオブジェクト(here's a great answer about that)を助けるだけでも十分かもしれません。

あなたには、いくつかのThe MySQL server has gone awayだ場合:

教義とMySQLを使用する場合は、子スレッドの次のコードを追加する必要があるかもしれません:

Doctrine_Manager::connection()->close(); 

これは、データベース接続を終了しますが、 Doctrineは最初のクエリで自動的に再作成します。

+0

あまりにも悪いです。今私はそれについて考えている、私は最初のインポートですので、私は今多くのファイルを持っている、私は定期的に私は問題がないはずですタスクを実行します。 – Manu

+0

私はdoctrineオブジェクトを解放することについての私の答えを他の答えで更新しました。おそらくこれはずっと簡単です。 – j0k

+0

まあ大丈夫、私はプロファイラを試してみましょう:虚偽とオハイオ州私の神はすべて今とても速いです! O.O lol nice tip、ありがとう:) – Manu

関連する問題