Doctrine中允许的内存大小耗尽

时间:2012-04-18 14:38:50

标签: php symfony-1.4 doctrine-1.2

我使用symfony 1.4(来自任务)和Doctrine 1.2来从大量文件中导入数据。

它运行良好,但几分钟后我得到了一个“允许的内存大小耗尽”来自PHP的致命错误,而不是我的代码,而是在Doctrine ...

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

我尝试在Doctrine调用中添加一些“ - > free()”,但现在它似乎在InverterTable->findOneBySerialNumber()失败,这是一种“神奇的”Doctrine方法。

如何解决问题?我是否需要编写自己的“findOneBySerialNumber”方法,添加对“free()”的调用?

1 个答案:

答案 0 :(得分:4)

这是学说的常见问题。您必须使用pcntl_fork

我总是以this gist为例。

pcntl_fork在Windows上不起作用,因为它需要一个遵循POSIX标准的操作系统。

也许应该只是帮助教导自由对象的对象here's a great answer about that

如果你有一些The MySQL server has gone away

使用Doctrine和MySQL时,可能需要添加以下子线程代码:

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

这将关闭数据库连接,Doctrine将在第一次查询时自动重新创建它。